<b>MySQL 索引详解</b>[MySQL防范]
本文“<b>MySQL 索引详解</b>[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
本文介绍了数据库索引,及其优、缺陷.针对MySQL索引的特点、利用举行了具体的描写.解析了若何避免MySQL无法利用,若何利用EXPLAIN解析查询语句,若何优化MySQL索引的利用.
索引是一种特别的文件(InnoDB数据表上的索引是表空间的一个构成部份),它们包含着对数据表里全部记录的引用指针.
注:
[1]索引不是万能的!
索引可以加快数据检索操作,但会使数据改正操作变慢.每改正数据记录,索引就必须革新一次.为了在某种程序上补偿这一缺陷,很多SQL号令都有一个DELAY_KEY_WRITE项.这个选项的作用是暂时禁止MySQL在该号令每插入一条新记录和每改正一条现有之后立即对索引举行革新,对索引的革新将等到全部记录插入/改正完毕之后再举行.在需求把很多新记录插入某个数据表的场所,DELAY_KEY_WRITE选项的作用将十清楚显.
[2]别的,索引还会在硬盘上占用相当大的空间.
因此应当只为最常常查询和最常常排序的数据列成立索引.注意,假如某个数据列包含很多反复的内容,为它成立索引就没有太大的实际效果.
从理论上讲,完好可认为数据表里的每个字段辨别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个.
1. InnoDB数据表的索引
与MyISAM数据表相比,索引对InnoDB数据的重要性要大得多.在InnoDB数据表上,索引对InnoDB数据表的重要性要在得多.在 InnoDB数据表上,索引不但会在搜索数据记录时施展作用,还是数据行级锁定机制的苊、底子.”数据行级锁定”的意思是指在事件操作的履行历程中锁定正在被处理的个体记录,不让其他用户举行拜候.这种锁定将影响到(但不限于)SELECT…LOCK IN SHARE MODE、SELECT…FOR UPDATE号令以及INSERT、UPDATE和DELETE号令.
出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上.明显,数据行级锁定机制只有在有关的数据表有一个符合的索引可供锁定的时刻才能施展效力.
2. 限制
假如WEHERE子句的查询条件里有不等号(WHERE coloum != …),MySQL将无法利用索引.
近似地,假如WHERE子句的查询条件里利用了函数(WHERE DAY(column) = …),MySQL也将无法利用索引.
在JOIN操作中(需求从多个数据表提取数据时),MySQL只有在主键和外键的数据范例相同时才能利用索引.
假如WHERE子句的查询条件里利用对比操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情形下才能利用索引.比方说,假如查询条件是LIKE ‘abc%’,MySQL将利用索引;假如查询条件是LIKE ‘%abc’,MySQL将不利用索引.
在ORDER BY操作中,MySQL只有在排序条件不是一个查询条件表达式的情形下才利用索引.(固然如此,在触及多个数据表查询里,即便有索引可用,那些索引在加快ORDER BY方面也没什么作用)
假如某个数据列里包含很多反复的值,就算为它成立了索引也不会有很好的效果.比方说,假如某个数据列里包含的净是些诸如”0/1″或”Y/N”等值,就没有必要为它成立一个索引.
以上是“<b>MySQL 索引详解</b>[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |