什么是索引:

  索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

建立索引合适的列

  经常用作where条件的列,order by排序的列

  数据列不重复而且并不是唯一的几个值

  不被经常修改的列

普通查询

SELECT * FROM emp WHERE empno=100002

查询缓存

SHOW GLOBAL VARIABLES LIKE '%query_cache%'

表的引擎 innodb:第一次查询走数据文件,再次回走缓存

SHOW VARIABLES LIKE '%storage_engine%'

加入索引

ALTER TABLE emp ADD INDEX(empno)
SELECT * FROM emp WHERE empno=100002

InnoDB:frm为表结构文件 ibd为索引+数据 文件

是否使用了索引

EXPLAIN SELECT * FROM emp WHERE empno=100002

添加组合索引 (第一个索引列会使用索引,第二个索引列单独使用的时候不会使用索引)

ALTER TABLE dept ADD INDEX my_ind (dname,loc)
SELECT * FROM dept WHERE dname='AfZIrJvZNO'
EXPLAIN SELECT * FROM dept WHERE dname='AfZIrJvZNO'
EXPLAIN SELECT * FROM dept WHERE dname='AfZIrJvZNO' AND loc='IWHzzYwk'
EXPLAIN SELECT * FROM dept WHERE loc='IWHzzYwk' AND dname='AfZIrJvZNO'

模糊查询 如果like前加 % 不会使用索引

EXPLAIN SELECT * FROM dapt WHERE dname LIKE '%AfZIrJvZNO%'

使用or,or不会使用索引,

EXPLAIN SELECT * FROM dept WHERE loc='IWHzzYwk' OR dname='AfZIrJvZNO'

需保证列都有索引

EXPLAIN SELECT * FROM dept WHERE deptno='10070' OR dname='AfZIrJvZNO'

判断是否为null 应使用in
explain select * from dept where dname=null

EXPLAIN SELECT * FROM dept WHERE dname IN NULL

group by 默认不是用索引

EXPLAIN SELECT * FROM emp GROUP BY deptno
EXPLAIN SELECT * FROM emp GROUP BY deptno ORDER BY NULL

查询时尽量少用 >= <=等等

EXPLAIN SELECT * FROM dept WHERE deptno<'10070'

注意事项

  不要在列上进行运算

  不使用NOT IN操作

    NOT IN操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替

  

MySQL优化2.索引的更多相关文章

  1. mysql 优化之索引的使用

    mysql 优化之索引的使用 1:MySQL 索引简介: MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL ...

  2. mysql优化之索引篇

    对mysql优化是一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引unique.全文索引] c: 分表技术(水平 ...

  3. mysql优化之索引优化

    Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 索引优化 索引优化涉及到几个方面,包括了索引 ...

  4. Mysql优化之索引和字段

    Mysql优化是一个老生常谈的问题, 优化的方向也优化很多:从架构层;从设计层;从存储层;从SQL语句层; 今天讲解一下从索引和字段: 字段优化: ①  尽量使用TINYINT.SMALLINT.ME ...

  5. 第九课——MySQL优化之索引和执行计划

    一.创建索引需要关注什么? 1.关注基数列唯一键的数量: 比如性别,该列只有男女之分,所以性别列基数是2: 2.关注选择性列唯一键与行数的比值,这个比值范围在0~1之前,值越小越好: 其实,选择性列唯 ...

  6. mysql优化之索引建立的规则

    索引经常使用的数据结构为B+树.结构例如以下 如上图,是一颗b+树,关于b+树的定义能够參见B+树,这里仅仅说一些重点.浅蓝色的块我们称之为一个磁盘块,能够看到每一个磁盘块包括几个数据项(深蓝色所看到 ...

  7. MySQL优化四 索引优化

    索引为什么能提高数据访问性能? 很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解. 我们让一位不太懂计算机的朋友去图书馆确认一本叫做<MySQL ...

  8. Mysql优化之索引

    前言 这几天抽了个时间将<高性能Mysql>看了一下忽觉索引非常之重要,习之然后总结巩固知识.本文索引使用的是InnoDB存储引擎.因为本文并不是说用索引的好处,所以并不会书写QPS之类的 ...

  9. 【Mysql优化】索引优化策略

    1:索引类型 1.1 B-tree索引 注: 名叫btree索引,大的方面看,都用的平衡树,但具体的实现上, 各引擎稍有不同, 比如,严格的说,NDB引擎,使用的是T-tree   Myisam,in ...

  10. MySQL优化之索引原理(二)

    一,前言 ​ 上一篇内容说到了MySQL存储引擎的相关内容,及数据类型的选择优化.下面再来说说索引的内容,包括对B-Tree和B+Tree两者的区别. 1.1,什么是索引 ​ 索引是存储引擎用于快速找 ...

随机推荐

  1. Docker - 查看容器进程在宿主机的 PID

    概述 查看 docker 进程, 在容器外的 pid 背景 docker 中运行的进程, 本质上是运行在 host 上的 这些进程, 在 host 上, 也可以有自己的 pid 如果某种情况下, 连不 ...

  2. 字符串判空有空格报错:binary operator expected

    使用-z或-n对一个变量判空时,需要注意若直接使用[ -n ${ARG} ]这种形式,若${ARG}中有空格将会报错, #!/bin/bash ARG="sd dd" if [ - ...

  3. Word2010如何从指定页设置页码

    光标定位:将光标定位于需要开始编页码的页首位置.   插入分隔符的”下一页”:选择“页面布局—>分隔符—> 下一页”插入.   插入页码:选择“插入—>页码—> 页面底端”,选 ...

  4. 老生常谈--Java值传递和引用传递

    起因 前两天面试被问到了这个问题,虽然之前老早就了解过这个问题,但是并没有深入了解,所以面试的时候一下子慌了,菜是原罪,今天菜鸡来补补基础知识. 其实这个问题一直是被讨论的,常见的三种说法就是,1,J ...

  5. java 子线程异常处理

    如何在父线程中捕获来自子线程的异常呢 方法一:子线程中try... catch... 方法二:为线程设置异常处理器UncaughtExceptionHandler (异常处理也是在子线程中执行,相当于 ...

  6. 概率dp 期望 逆推

    题目大意: 从起点0点开始到达点n,通过每次掷色子前进,可扔出1,2,3,4,5,6这6种情况,扔到几前进几,当然对应飞行通道可以通过x直达一点y,x<y,计算到达n点或超过n 点要扔色子的次数 ...

  7. PyCharm 上传项目到码云托管平台

    码云平台设置: >先到码云 https://gitee.com/ 注册账号 >创建项目,选择合适项目,点击加号 >填写项目的基础信息 在码云上就创建了项目 >安装 Git    ...

  8. 转载: HDMI 基础知识

    转自:http://www.cnblogs.com/TaigaCon/p/3840653.html HDMI,全称为(High Definition Multimedia Interface)高清多媒 ...

  9. 【转】VMware Converter迁移linux系统虚拟机

    原始出处 今天接到一个需求,迁移一台linux的业务系统到vCenter云管理平台,其中遇到一些问题,于是进行了排错,这个过程与大家分享,下面把整个步骤进行截图说明. 1. 首先,登录到VMware  ...

  10. yii components文件到底应该放些什么代码

    项目全局用的代码,比如项目所有controller和model的共通操作或者放一些第三方的组件.插件之类的项目全局用的代码