mysqlsuoyin/ target=_blank class=infotextkey>mysql索引优化的例子:
某个sql语句后出现大量的lock,有很多其他查询被阻塞。当前表的索引结构。
发现这个问题是show processlist结合slow query log发现的。
执行的SQL语句:
这个用户有9W多行的数据,使用explain分析sql执行过程,耗时8秒,使用的索引是idx_t_slide_fadd_time。
等于是先按照全局排序在去找数据。
经过分析后强制使用索引Fuser_id,让MYSQL先找到用户在处理。强制使用索引用use index
速度提升到2秒,虽然还是慢,但已不是那么严重了。
mysql索引优化如果使用联合索引将Fuser_id,Fadad_time字段放到一起做索引。速度超快,提升效果明显。
下面介绍下mysql索引的用处。
MySQL索引在mysql数据库中,可以有效提高查询的效率,尤其是查询数据量非常大时,效果更为明显,往往能使查询速度加快成千上万倍。
MySQL索引作用
在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。
例如,有3个未索引的表t1、t2、t3,分别只包含列c1、c2、c3,每个表分别含有1000行数据组成,指为1~1000的数值,查找对应值相等行的查询如下所示。
SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3
此查询结果应该为1000行,每行包含3个相等的值。在无索引的情况下处理此查询,必须寻找3个表所有的组合,以便得出与WHERE子句相配的那些行。而可能的组合数目为1000×1000×1000(十亿),显然查询将会非常慢。
如果对每个表进行索引,就能极大地加速查询进程。
利用索引的查询处理如下。
1,从表t1中选择第一行,查看此行所包含的数据。
2,使用表t2上的索引,直接定位t2中与t1的值匹配的行。类似,利用表t3上的索引,直接定位t3中与来自t1的值匹配的行。
3,扫描表t1的下一行并重复前面的过程,直到遍历t1中所有的行。
在此情形下,仍然对表t1执行了一个完全扫描,但能够在表t2和t3上进行索引查找直接取出这些表中的行,比未用索引时要快一百万倍。
利用MySQL索引,MySQL加速了WHERE子句满足条件行的搜索,而在多表连接查询时,在执行连接时加快了与其他表中的行匹配的速度。
分享:Mysql索引优化的技巧
深入理解Mysql的列索引和多列索引
了解 MySQL 主键与索引的联系与区别
mysql性能优化之索引优化