分享人:韩要贺
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
索引用来快速地寻找那些具有特定值的记录,如果没有索引,执行查询时Mysql必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录,表里面的记录数量越多,这个操作的代价就越高,如果作为搜索条件的列上已经创建了索引,mysql无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有一千个记录,通过索引查找记录至少要比顺序扫描记录快100倍。所以对于现在的各种大型数据库来说,索引可以大大提高数据库的性能,以至于它变成了数据库不可缺少的一部分。
mysql提供多种索引类型供选择:普通索引,唯一索引,主键
全文索引,单列索引,与多列索引
普通索引
普通索引的唯一任务是加快对数据的访问速度,因此,应该只为那些最经常出现在查询条件(WHERE column=)或者排序条件(ORDERBY column)中的数据列创建索引
主键
必须为主键字段创建一个索引,这个Mysql索引就是所谓的“主索引”。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE
唯一性索引
如果确定某个数据列只包含彼此各不相同的值,在为这个数据列创建索引的时候,就应该用关键字UNIQUE把它定义为一个唯一索引,Mysql会在有新纪录插入数据表时,自动检查新纪录的这个字段的值是否已经在某个记录的这个字段里出现过了。如果是,mysql将拒绝插入那条新纪录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复
索引的优点
1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性
2.建立索引可以大大提高检索的数据,以及减少表的检索行数
3.在表连接的连接条件,可以加速表与表直接的相连
4.在分组和排序字句进行数据检索,可以减少查询时间中分组和排序时所消耗的时间(数据库的记录会重新排序)
5.建立索引,在查询中使用索引,可以提高性能
索引的缺点
1.创建索引和维护索引,会耗费时间,随着数据量的增加而增加
2.索引文件会占用物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间
3.当对表的数据进行INSERT,UPDATE,DELETE的时候,索引也要动态的维护,这样就会降低数据的维护速度,(建立索引会占用磁盘空间的索引文件)。
1.如何创建索引
2.隐式类型转换对MySQL选择索引的影响。
3.什么情况下建索引。
4.什么情况不建索引。
5.索引对查询提高多少性能?
1.SQL插入索引语句。
普通索引:ALTER TABLE'table-name' ADD INDEX index_name('column')
唯一索引:ALTER TABLE'table-name' ADD UNIQUE('column')
主键索引:ALTER TABLE'table-name' ADD PRIMARY KEY ('column')
2.当文本字段与数字进行比较时,由于类型不同,MySQL需要做隐式类型转换才能进行比较。
默认转换规则是:不同类型全都转换为浮点型m,如果字段是字符,条件是整型,那么会把表中字段全都转换成整型
3.1.在经常需要搜索的列上,可以加快索引的速度
3.2主键列上可以确保列的唯一性(手机号,身份证号,银行卡号)。
3.3在表与表的而连接条件上,加上索引,可以加快连接查询的速度。
3.4.在经常需要排序(order by)分组(group by)和distinct列上加索引可以加快排序查询的时间,(单独order by用不了索引,索引考虑加where或者加limit)
3.5.尽量选择区分度高的列作为索引。
3.6.索引列不能参与计算,保持列“干净”。
3.7.尽量的扩展索引,不要新建索引。
4.1.查询中很少使用到的列,不应该创建索引,如果建立了索引然而还会降低mysql的性能和增大了空间需求。。
4.2很少数据的列也不应该建立索引,比如一个性别字段0或者1,在查询中,结果集的数据占了表中数据行的比例比较大,mysql需要扫描的行数很多,增加索引,并不能提高效率。
4.3定义为text和image和bit数据类型的列不应该增加索引。
4.4.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作时互斥的关系。
3.张庆东师兄的ppt
今天的分享就到这里啦,欢迎大家提问和探讨!