加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL教程mysql索引优化实例分享

发布时间:2020-12-12 02:47:50 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL教程mysql索引优化实例分享》要点: 本文介绍了MYSQL教程mysql索引优化实例分享,希望对您有用。如果有疑问,可以联系我们。 导读:mysql索引优化的例子:某个sql语句后出现大量的lock,有很多其他查询被阻塞.当前表的索引布局.发现这个问题是show pro

《MYSQL教程mysql索引优化实例分享》要点:
本文介绍了MYSQL教程mysql索引优化实例分享,希望对您有用。如果有疑问,可以联系我们。

导读:mysql索引优化的例子:某个sql语句后出现大量的lock,有很多其他查询被阻塞.当前表的索引布局.发现这个问题是show processlist结合slow...

mysql索引优化的例子:
某个sql语句后出现大量的lock,有很多其他查询被阻塞.当前表的索引布局.
发现这个问题是show processlist结合slow query log发现的.
?MYSQL入门

mysql> show index from t_slide;
+---------+------------+-----------------------+--------------+-------------+
| Table?? | Non_unique | Key_name????????????? | Seq_in_index | Column_name |
+---------+------------+-----------------------+--------------+-------------+
| t_slide |????????? 0 | PRIMARY?????????????? |??????????? 1 | Fslide_id?? |
| t_slide |????????? 1 | Fuser_id????????????? |??????????? 1 | Fuser_id??? |
| t_slide |????????? 1 | Fcategory???????????? |??????????? 1 | Fcategory?? |
| t_slide |????????? 1 | Fdomain_key?????????? |??????????? 1 | Fdomain_key |
| t_slide |????????? 1 | idx_t_slide_fadd_time |??????????? 1 | Fadd_time?? |

执行的SQL语句:
?MYSQL入门

SELECT * FROM t_slide WHERE Fuser_id=200468950 and (Fstatus=1 or Fstatus=4) and Fshare_set<>9 ORDER BY Fadd_time DESC LIMIT 0,20;

这个用户有9W多行的数据,使用explain分析sql执行过程,耗时8秒,使用的索引是idx_t_slide_fadd_time.
等于是先依照全局排序在去找数据.MYSQL入门

经过阐发后强制使用索引Fuser_id,让MYSQL先找到用户在处理.强制使用索引用use index
?MYSQL入门

SELECT * FROM t_slide use index(Fuser_id) WHERE Fuser_id=200468950 and (Fstatus=1 or Fstatus=4) and Fshare_set<>9 ORDER BY Fadd_time DESC LIMIT 0,20;

速度提升到2秒,虽然还是慢,但已不是那么严重了.MYSQL入门

mysql索引优化如果使用联合索引将Fuser_id,Fadad_time字段放到一起做索引.速度超快,提升效果明显.
?MYSQL入门

alter table t_slide add index SLIDE_TIME (Fslide_id,Fadd_time);

下面介绍下mysql索引的用处.MYSQL入门

MySQL索引在MySQL数据库中,可以有效提高查询的效率,尤其是查询数据量非常年夜时,效果更为明显,往往能使查询速度加快成千上万倍.MYSQL入门

MySQL索引作用MYSQL入门

在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够年夜年夜提高查询效率.特别是当数据量非常年夜,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍.MYSQL入门

例如,有3个未索引的表t1、t2、t3,分别只包括列c1、c2、c3,每个表分别含有1000行数据组成,指为1~1000的数值,查找对应值相等行的查询如下所示.MYSQL入门

SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3
此查询结果应该为1000行,每行包括3个相等的值.在无索引的情况下处理此查询,必须寻找3个表所有的组合,以便得出与WHERE子句相配的那些行.而可能的组合数目为1000×1000×1000(十亿),显然查询将会非常慢.MYSQL入门

如果对每个表进行索引,就能极大地加速查询进程.
利用索引的查询处理如下.
1,从表t1中选择第一行,查看此行所包括的数据.
2,使用表t2上的索引,直接定位t2中与t1的值匹配的行.类似,利用表t3上的索引,直接定位t3中与来自t1的值匹配的行.
3,扫描表t1的下一行并重复前面的过程,直到遍历t1中所有的行.
在此情形下,仍然对表t1执行了一个完全扫描,但能够在表t2和t3上进行索引查找直接取出这些表中的行,比未用索引时要快一百万倍.MYSQL入门

利用MySQL索引,MySQL加速了WHERE子句满足条件行的搜索,而在多表连接查询时,在执行连接时加快了与其他表中的行匹配的速度.

分享:Mysql索引优化的技巧
深入懂得Mysql的列索引和多列索引
了解 MySQL 主键与索引的联系与区别
mysql性能优化之索引优化MYSQL入门

欢迎参与《MYSQL教程mysql索引优化实例分享》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读