`
Sobfist
  • 浏览: 30770 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸
社区版块
存档分类
最新评论

谈谈关于mysql数据库索引

阅读更多
  数据库开发中索引的使用占了很重要的位置,好的索引会使数据库的读写效率加倍,烂的索引则会拖累整个系统甚至引发灾难。

             索引分三类:

             index ----普通的索引,数据可以重复

             unique ----唯一索引,唯一索引,要求所有记录都唯一

             primary key ----主键索引,也就是在唯一索引的基础上相应的列必须为主键

MySQL 中会对 <,<=,=,>,>=,BETWEEN,IN 以及不以% _ 开头的like 语句使用索引。


1、选择索引的数据类型

MySQL支持很多数据类型,选择合适的数据类型存储数据对性能有很大的影响。通常来说,可以遵循以下一些指导原则:
(1)越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和CPU缓存中都需要更少的空间,处理起来更快。
(2)简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂。在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储时间;以及用整型数据类型存储IP地址。
(3)尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。


2、选择标识符
选择合适的标识符是非常重要的。选择时不仅应该考虑存储类型,而且应该考虑MySQL是怎样进行运算和比较的。一旦选定数据类型,应该保证所有相关的表都使用相同的数据类型。
(1)    整型:通常是作为标识符的最好选择,因为可以更快的处理,而且可以设置为AUTO_INCREMENT。

(2)    字符串:尽量避免使用字符串作为标识符,它们消耗更好的空间,处理起来也较慢。而且,通常来说,字符串都是随机的,所以它们在索引中的位置也是随机的,这会导致页面分裂、随机访问磁盘,聚簇索引分裂(对于使用聚簇索引的存储引擎)。


3、索引入门
对于任何DBMS,索引都是进行优化的最主要的因素。对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降。
如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅能对索引最左边的前缀进行有效的查找。例如:
假设存在组合索引it1c1c2(c1,c2),查询语句select * from t1 where c1=1 and c2=2能够使用该索引。查询语句select * from t1 where c1=1也能够使用该索引。但是,查询语句select * from t1 where c2=2不能够使用该索引,因为没有组合索引的引导列,即,要想使用c2列进行查找,必需出现c1等于某值。
分享到:
评论

相关推荐

    简单谈谈Mysql索引与redis跳表

    摘要 面试时,交流有关mysql索引问题时,... 数据库的索引还能有其他实现吗 redis跳表是如何实现的 跳表和B+树,LSM树有和区别呢 解析 首先为什么要把mysql索引和redis跳表放在一起讨论呢,因为他们解决的都是同一种

    MySQL数据库设计报告模板.doc

    郑州师范学院软件工程专业 MySQL数据库设计报告 设计题目: 班 级: 组 长: 姓名(学号) 组 员:姓名(学号)… 完成日期: 成绩: 教师评语: 摘要 本系统为学生学籍管理系统,是一个信息管理系统,其开发主要包括...

    43道MySQL面试题集合(附答案)

    1. 请说下你对 MySQL 架构的了解? 2. 一条 SQL 语句在数据库框架中的执行流程? 3. 数据库的三范式是什么? 4. char 和 varchar 的区别? 5. varchar(10) 和 varchar(20) 的区别? 6. 谈谈你对索引的理解? 7. 索引...

    mysql中提高Order by语句查询效率的两个思路分析

    在MySQL数据库中,Order by语句的使用频率是比较高的。但是众所周知,在使用这个语句时,往往会降低数据查询的性能。因为可能需要对数据库的记录进行重新排序。在这篇文章中,笔者就谈谈提高Order By语句查询效率的...

    简单了解MySQL数据库优化技巧

    这篇文章主要谈谈MySQL数据库在发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 阶段一:数据库表设计 项目立项后,开发部门根据产品部门需求开发项目。 开发工程师在开发项目初期...

    2022年MySQL最新面试题,很全,已拿大厂 offer

    5、平时用到哪些关系型数据库和非关系数据库, 可以谈谈你对它们的理解吗? 6、可以简单说说你对MySQL的逻辑架构了解吗? 7、了解MySQL中的MVCC是什么? 8、PostgreSQL相对于MySQL的优势 9、PostgreSQL和MySQL的一些...

    数据库知识点总结

    文章目录1. 什么是数据库事务?数据库事务的四个特性是什么?2. 请分别举例说明幻读和不可重复读,并...10. 谈谈MyISAM和innoDb实现Btree索引方式的区别11. B+tree与B-tree的区别是什么?为什么B+tree更适合做文件索

    优化 SQL Server 索引的小技巧

    在本文中,我将说明如何用SQL Server的工具来优化数据库索引的使用,本文还涉及到有关索引的一般性知识。 关于索引的常识 影响到数据库性能的最大因素就是索引。由于该问题的复杂性,我只可能简单的谈谈这个问题,...

    浅谈MySQL排序原理与案例分析

    本文首先会简单介绍SQL如何利用索引避免排序代价,然后会介绍MySQL实现排序的内部原理,并介绍与排序相关的参数,最后会给出几个“奇怪”排序例子,来谈谈排序一致性问题,并说明产生现象的本质原因。 1.排序优化与...

    MySQL排序原理与案例分析

    本文首先会简单介绍SQL如何利用索引避免排序代价,然后会介绍MySQL实现排序的内部原理,并介绍与排序相关的参数,后会给出几个“奇怪”排序例子,来谈谈排序一致性问题,并说明产生现象的本质原因。  1.排序优化与...

    MySQL排序原理和案例详析

    本文首先会简单介绍SQL如何利用索引避免排序代价,然后会介绍MySQL实现排序的内部原理,并介绍与排序相关的参数,最后会给出几个“奇怪”排序例子,来谈谈排序一致性问题,并说明产生现象的本质原因。 1.排序优化与...

    面试官千变万化-总结他们问MYSQL的知识

    当你简历上写了 熟悉mysql关系型数据库时,那肯定免不了面试官对于myql索引.事务,慢查询等等的考察 那么到底什么是索引,索引的数据类型有哪些,它们的优缺点以及如何去排查那些慢SQL语句等,虚都莫虚,下面都给各位安排...

    Java面试宝典2020修订版V1.0.1.doc

    40、谈谈你知道的数据库和中间件 54 41、oracle和MySQL的区别 54 42、简述Mysql的InnoDb 55 43、删除重复数据只保留一条。 55 44、一个几千万数据,发现数据查询很慢,怎么办? 55 六、Java高级部分 56 1、java中有...

    beauty of architecture

    MySQL索引背后的数据结构和算法原理 4.1.2 NoSQL 集群环境下关系型数据库扩展性的问题 数据模型与存储模型的矛盾 NoSQL的来源、主要特征和适用场景 4.1.3分布式文件系统 Google分布式文件系统(GFS) Google...

    asp.net知识库

    在.NET访问MySql数据库时的几点经验! 自动代码生成器 关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--...

Global site tag (gtag.js) - Google Analytics