经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
【数据库】-- MySQL SQL调优笔记(2)
来源:cnblogs  作者:人无名,则可专心练剑  时间:2021/12/20 15:46:26  对本文有异议

1.常规索引优化方式

1.1.单表优化

  1. # 查询category_id为1且comments大于1的情况下,views最多的article id
  2. SELECT id, author_id FROM article WHERE category_id = 1 AND comments > 1 ORDER BY views DESC LIMIT 1;
  3. EXPLAIN SELECT id, author_id FROM article WHERE category_id = 1 AND comments > 1 ORDER BY views DESC LIMIT 1;
  4. # 单表优化--建立对应索引 优化方案:cv建立索引
  5. create index idx_article_cv on article(category_id,views);

总结:mysql索引是遵从B树索引原则,当建立ccv索引时,先排序category_id,如果遇到相同的category_id则再排序comments,如果遇到相同的comments则再排序

views。而如果处于联合索引中间位置的字段comments > 1是一个范围值(range),则无法利用索引再对后面的views部分进行检索,即range类型查询字段后面的

索引会失效。

这种情况建立cv索引最好。

1.2.两表优化

  1. EXPLAIN SELECT b.bookid,c.card FROM book b LEFT JOIN class c ON b.card = c.card;
  2. # 优化方案:两表连接,左连接索引建立在右表,右连接索引建立在左表;或者查询对调位置
  3. create index idx_class_card on class(card);

总结:两表连接,左连接索引建立在右表,右连接索引建立在左表;或者查询对调位置。

且注意小表驱动大表。

1.3.三表优化

  1. # 针对连接的第三张表phone再在右表phone上建立一个索引
  2. create index idx_class_card on class(card);
  3. create index idx_phone_card on phone(card);
  4. EXPLAIN SELECT * FROM class LEFT JOIN book ON class.card = book.card LEFT JOIN phone ON book.card = phone.card;

总结:三表连接,左连接索引建立在右表连接字段上,右连接建立在左表连接字段上;且注意小表驱动大表;如上,LEFT JOIN都建立在右表连接字段上。

三表连接,建立了两个表的索引。

2.索引失效

七字口诀:“模型数空运最快”

模:模糊查询,like 如果以%开头,索引会失效;

型:数据类型,如果数据类型错误了,索引会失效;

数:函数,对索引字段使用内部函数,索引会失效,应该建立基于函数的索引;

空:null,索引不存储空值,如果不限制索引列是not null,数据库会认为索引列可能存在空值,也不会按照索引进行计算;

运:运算,对索引列进行加减乘除等运算会导致索引失效;

最:最左原则的意思,在复合索引中,索引列的顺序非常重要,如果不是按照索引列最左列开始进行查找,则无法使用索引;

快:全表扫描更快的意思,如果数据库预计使用全表扫描比使用索引更快,那就不会使用索引

 

原文链接:http://www.cnblogs.com/yif0118/p/15709243.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号