前言

索引基础知识
建立索引

alter table table_name add index (index_name);

删除索引

ALTER  TABLE  table_name   DROP  INDEX  index_name;

查看表中的索引

show index from table_name;

如何优化SQL语句?

SQL语句优化的思路:

  1. 先看表的数据类型是否涉及得合理,有没有遵守选取数据类型越简单越小的原则;
  2. 表中的碎片是否整理;
  3. 表的统计信息是否收集,只有统计信息准确,执行计划才可以帮助我们优化SQL;
  4. 查看执行计划,检查索引的使用情况,没有用到索引,考虑创建;
  5. 在创建索引之前,还要查看说索引的选择性,来判断这个字段是否合适创建索引(尽量选择重复值少的字段)。
  6. 创建索引之后,再查看一下执行计划,对比两次结果,看是否查询效率提高了。

合理创建索引的三个 “经常”:

  1. 经常被查询的列(一般放在where 条件后面);
  2. 经常用于表连接的列;
  3. 经常排序分组的列(order by 或者 group by 后面的字段)。

一个案例分析创建索引前后的效率区别

建立索引之前,需要确定建立该索引是否对查询效率有帮助,我们可以通过explain来查看某个查询语句的查询计划:

EXPLAIN select * from t where name = '45126-NAME'

  • type,如果出现all关键字,代表是全表扫描
  • key,如果是Null代表没有使用索引
  • rows,表示在SQL执行过程中被扫描的行数,该数值越大,意味着耗时越大
  • extra,如果出现Using filesort 或者 Using temporary关键字,将很影响数据库性能
  • filtered,指返回结果的行占需要独到的行的百分比

然后,我们给t表的name字段添加索引:

alter table t add index (name)

再查看执行计划:

可以看到,添加索引后,rows值从59912变成了1,说明实际扫描行数变得很短,扫描时间相应的变短了。

如何合理地建立 Mysql 索引相关推荐

  1. mysql建立高效索引,如何知道你建立的MySQL索引是高效,合理的

    不管是开发人员,仍是数据库维护人员,给表建立索引是很常见的事情.普通到什么程度,初级,中级开发人员的印象中,只要写的sql语句效率不高,第一反应就是建索引,而无论这个字段是否适合建立索引.反正只要给字 ...

  2. MySQL索引介绍,普通索引,全文索引,空间索引,多列索引使用原则,建立索引常用的规则

    转自:https://blog.csdn.net/tomorrow_fine/article/details/78337735 1.MySQL在创建数据表的时候创建索引 在MySQL中创建表的时候,可 ...

  3. 大文本存mysql怎么建索引_如何正确合理的建立MYSQL数据库索引

    # 有这样一个表 P mysql> create table P (id int primary key, name varchar(10) not null, sex varchar(1), ...

  4. mysql 索引查询_mysql索引的建立和查询语句优化

    首先表内容展示: # 300W条的模拟数据 # 并且没有建立任何索引 不建立索引的查询时间: 以id查询的(4秒多): 以email查询的(4秒多): 建立主键索引后: alter table s1 ...

  5. mysql索引三个字段查询两个字段_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a,     a,b    a,b, ...

  6. mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a,     a,b    a,b, ...

  7. mysql索引三个字段查询两个字段_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?......

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a,     a,b    a,b, ...

  8. MySQL建立的索引看_MYSQL索引问题:索引在查询中如何使用?看了很多资料都只说索引的建立。是否建立了就不用再理会?...

    # 有这样一个表 P mysql> create table P (id int primary key, name varchar(10) not null, sex varchar(1), ...

  9. mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a,     a,b    a,b, ...

最新文章

  1. Could not install packages due to anEnvironmentError: [WinError 5] 拒绝访问
  2. 北斗导航 | NED(北东地)转ECEF(地心地固)或ECEF转NED(Matlab源代码)
  3. 大话数据结构:多路查找
  4. 引用自己创建的css样式表_如何使用CSS创建联系表
  5. windows7电脑怎么永久关闭广告
  6. function core.php is missing,PHP代码
  7. javax.crypto.BadPaddingException: Blocktype ...
  8. Java 的自动装箱拆箱
  9. chrome插件,脚本中实现跨域请求
  10. 声卡调试精调效果都用那些宿主(DAW)机架和效果器插件
  11. MxCAD云图DWG转PDF
  12. 美国拉斯维加斯游戏CRAPS(花旗骰)掷骰子的游戏的C语言版本
  13. 如何简单理解光圈大小对手机摄影的影响?
  14. 又是一道题拉开差距!IOI落幕,中国队三金一银,美国华人选手再获冠军
  15. C++右值引用与函数返回值
  16. 互联网装修还有多少机会?
  17. 创建一个使用utf8字符集的数据库
  18. Linux下一些网络小技巧
  19. ubuntu 安装中文输入法(超简靠谱版)
  20. pa服务器系统,常见问题

热门文章

  1. .NET回归 HTML----超文本标记语言(暂时无图)
  2. SpringMVC4 实例
  3. ibatis动态的传入表名、字段名
  4. c++模板类被继承时他的成员不能被子类看到
  5. 【Java从0到架构师】Servlet_JSP
  6. 【删库不跑路】—Linux系统自杀实验 rm -rf /* 及如何抢救和预防
  7. Windows域策略设置 禁止客户端上网【全域策略生效】
  8. python进阶14文件路径(找不到文件)
  9. Windows TensorFlow环境搭建
  10. h5外卖源码php_从零搭建外卖CPS平台小程序开发