MySQL索引优化案例

文章目录

    • 1.range导致索引失效
    • 2.两表优化
    • 3.三表优化

1.range导致索引失效

在这里插入图片描述
针对这样的sql语句,它属于article表,并且事先准备了索引:
cteate index idx_article_ccv on article(category_id,comments,views);
我们执行上面的explain会出现以下结果:
在这里插入图片描述
原因:
MySQL索引优化案例_第1张图片
解决:
重新建立索引,先删除原来的索引drop index idx_article_ccv on article,然后建立新的索引:
cteate index idx_article_cv on article(category_id,views);
再次执行explain:
在这里插入图片描述
发现不会出现文件类排序,即建立的索引不应该包含有范围约束的列

2.两表优化

建表SQL:
MySQL索引优化案例_第2张图片
下面开始explain分析:
在这里插入图片描述
结果:
MySQL索引优化案例_第3张图片
这里说明一下,左外连接和右外链接这些情况下,都有一个表作为驱动表,我们分两次情况建立索引
给右表建立索引:
MySQL索引优化案例_第4张图片
标注的地方都变化了,说明sql被优化了
给左表建立索引:
MySQL索引优化案例_第5张图片
前面我们说过type类型ref>index,并且rows数量右表>左表,通过我们的分析,左连接的情况下,左表的每条记录必须有,用左表的记录去一行行匹配右表,所以索引一般建立在右表上

3.三表优化

在第而种情况下再追加一张表:
MySQL索引优化案例_第6张图片
这时候三张表都没有索引:
MySQL索引优化案例_第7张图片
这种情况要查询的举记录太多,是因为第一个左外连接的结果作为新的表再和第三张表进行匹配,这时候需要建立索引来优化:
在这里插入图片描述
我们在主表class之外的两张表分别建立索引,再来看看结果:
MySQL索引优化案例_第8张图片
效果显而易见

你可能感兴趣的:(数据库,mysql,数据库,索引)