MySQL索引优化

摘要:
Extra中的Usingfilesort是根据where后面的条件创建的,但Extra中使用的文件排序没有解决。此时,索引将被删除:type=ALL。全表扫描中有两个表。此时,显然book表是通过type=ref进行优化的;现在添加左表类;此时,您可以看到类表的type=索引;它构建在正确的表type=ref中,因此必须对正确的表进行索引。

一、单表

创建索引之前:type=ALL全表扫描,Extra里面的Using filesort(文件内部排序)

MySQL索引优化第1张

根据where后面的条件创建CREATE INDEX idx_article_ccv ON article(category_id,comments,views);

MySQL索引优化第2张

   可以看出type由ALL变成了range,但是Extra里面的Using filesort(文件内部排序)未解决

   此时删除索引:DROP INDEX idx_article_ccv ON article;

   重新建立CREATE INDEX idx_article_ccv ON article(category_id,views);

MySQL索引优化第3张

此时完美解决!!

二、双表

 创建索引之前:type=ALL全表扫描

MySQL索引优化第4张

 此时有两个表,里面都有字段card,但是现在不知道应该建左表class还是右表book,所以可以先建右表book,查看之后再进行优化

ALTER TABLE book ADD index  Y('card');

MySQL索引优化第5张

此时可以明显看到book表得到优化type=ref,但是class表未得到改变,于是删除索引DROP INDEX Y ON book;

现在加左表class: ALTER TABLE class ADD INDEX Y ('card');

MySQL索引优化第6张

此时看到class表的type=index,建立在右表type=ref,因为ref>index,rows=40>前者的21,所以权衡之间,得到:

  左右连接时,左连接建右表索引,右连接建左边索引,因为这是由于左右连接特性决定的,左连接左表一定都有,右表成了关键点,所以右表一定要建立索引,右连接反之。

 三、三表

  创建索引之前:type=ALL全表扫描,rows=60

MySQL索引优化第7张

  从上面两表或查询中总结出左连接建右表,那么这里给phone表和book表创建索引

MySQL索引优化第8张

  创建好索引后查看结论

MySQL索引优化第9张

此时看到后两行的type都为ref,中rows=22,优化的很好,因此索引最好建立在经常查询的字段中

四、索引失效

MySQL索引优化第10张

最佳左前缀法则:如果索引了多列,指的是查询从索引的最左抢前列开始并且不跳过索引中的列

问题:如何解决like %字符串%索引失效

  1、百分号只写右边aa%不失效

  2、使用覆盖索引【何为覆盖索引见我的上一篇文章MySQL的explain中有解释】

小结:

MySQL索引优化第11张

优化口诀:

MySQL索引优化第12张

免责声明:文章转载自《MySQL索引优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle中返回多个结果集的处理<转>对编译原理的一些看法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

elasticsearch-query-builder, 一款可以基于配置化以及参数绑定的ES语句构造神器

前言 在这里,我想向大家推荐一个我自己开发的项目,也就是elasticsearch-query-builder,这个项目目前在github上已经开源,有兴趣的朋友可以去fork或者star,你的star就是对我最大的鼓励。同时,本项目长期维护和更新,我也接受并且很高兴有小伙伴向本项目pull request,或者协同开发,有兴趣的同学可以给我发邮件。 el...

Preference 使用详解

极力推荐文章:欢迎收藏Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: Perference 简介 Perference 使用方法 使用XML定义Preference 使用Fragment 定义Preference...

Hive的基本操作

一、创建数据库   hive>create database mydb ; //hql和mysql语法极其相似   hive>show databases;//查看所有数据库 二、创建表   格式:     create [external] table <表名>(列的定义,....)  [row format delimited...

在用scrapy时遇到的坑

1. 一开始是想用scrapy和selenium来爬什么值得买,结果遇到了一个奇怪的问题,直接上代码 def start_requests(self): self.logger.info("starting") broswer = webdriver.Firefox() broswer.get(self...

layui动态创建Tab、Tab右键功能

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-...

新浪实时股票数据接口1

股票数据的获取目前有如下两种方法可以获取:1. http/javascript接口取数据 2. web-service接口 1.http/javascript接口取数据 1.1Sina股票数据接口 以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据接口:http://hq.sinajs.cn/list=sh601006...