Mysql 入门第五课


1.索引的优点

无索引的表就是一组无序的行,如果要查询,要进行全表扫描。使用索引提高查询效率的做法是,我们可以得知匹配行在什么位置结束,从而跳过其余部分。另一种是利用定位算法,不用从索引开始位置进行线性扫描,即可直接找到第一个匹配项(例如利用二分搜索比扫描要快很多)


为何不直接对行数据进行排序,省掉索引操作呢? 如果表里只有一种索引,那是可以这么做的,但是你可能还想添加第二个索引,但又不能同时按两种方式对数据进行排序。


对于不同的Mysql存储引擎,索引的具体实现细节会有所不同。


Mysql使用索引的方式有以下几种;

索引可以用于加快对WHERE子句匹配的行进行搜索的速度,或者用于加快对,与另一个连接表里的行匹配的行,进行搜索的速度。

对于使用MIN(), MAX()函数的查询,Mysql可以在不用逐行检查的情况下,快速找到索引列里的最小值最大值。

对于ORDER BY 和 GROUP BY 子句,Mysql 经常使用索引来高效地完成分类和分组操作。


2. 索引的代价  


索引可以加快检索速度,但是它同时也降低了索引列插入、删除和更新值的速度。其次索引也会占用磁盘空间,多个索引会占据更大的空间。与没有索引相比,使用索引会让你很快便达到表的大小极限。


3. 挑选索引


(1)为用于搜索、排序或分组的列创建索引,而对于用作输出显示的列则不用创建索引。

(2)认真考虑数据列基数:某个列包含值1,3,4,7,4,7,那么它的基数是4,相对于表里行的总数来说,列的基数越高,索引的效果越好。

(3)索引短小值:选用较小的数据类型

(4)索引字符串值的前缀

(5)利用最左前缀

(6)不要建立过多的索引

(7)让参与比较的索引类型保持匹配

(8)利用慢查询日志找出那些性能低劣的查询


4. Mysql查询优化程序

可以用EXPLAIN来显示SELECT是如何工作的,即是否使用索引还有其他信息,如下

EXPLAIN SELECT *FROM  mytable WHERE...


查询优化程序的工作原理

(1)分析表。ANALYSE TABLE 来分析表,这将生成关于键值分布情况的统计数据,它们可以帮助优化程序更准确地评估索引效率。

(2)使用EXPLAIN验证优化程序的操作。

(3)在必要时给予优化程序提示或改写它。在连接操作的列表里,可以在表名后面加上FORCE INDEX、USE INDEX或IGNORE  INDEX,以告知服务器期望使用哪儿些索引。

(4)比较拥有相同数据类型的列。

(5)让索引列在比较表达式中单独出现

WHERE mycol *2<4

WHERE mycol<4/2

对于第一行,没有用到索引,先计算乘法,需要扫描全表

第二行,先计算除法,用到索引,找到表中小于2的数据

(6)不用在LIKE模式的开始位置使用通配符

WHERE mycol LIKE '%string%';

如果想要把无论是否出现在该列里的所有字符串都找出来,那么这个句子没错。如果只想把出现在该列开始位置的字符串找出来,则需要删除第一个‘’%‘’。

(7)避免过多的使用自动类型转换

SELECT *FROM  mytable WHERE i=4;

SELECT *FROM  mytable WHERE i='4';


如果想要给一个表中的某一列添加索引,可以用ALTER TABLE  表名  ADD INDEX  (列名);


5.选择利于高效查询的数据类型

多用数字运算,少用字符串运算

当较小类型够用时,就不用较大类型

考虑使用ENUM列

使用PROCEDURE ANALYSE()

整理表碎片

把数据压缩到BLOB或TEXT列

使用合成索引







你可能感兴趣的:(Mysql 入门第五课)