MySQL Optimization Part 4 - Indexes Usage

原创 2016年08月31日 01:57:43

MySQL Optimization Part 4 - Indexes Usage

目录


索引的注意事项

索引的代价:

  • 占用磁盘空间
  • 对 dml 操作有影响,变慢

哪些列适合添加索引

  • 较频繁的作为查询条件字段应该创建索引

    select * from emp where empno = 1
  • 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

    select * from emp where sex = '男’
  • 更新非常频繁的字段不适合创建索引

        select * from emp where logincount = 1
  • 不会出现在WHERE子句中字段不该创建索引

总结: 满足以下条件的字段,才应该创建索引.

  • 肯定在 where 条经常使用
  • 该字段的内容不是唯一的几个值 (sex)
  • 字段内容不是频繁变化.

索引的使用

查询要使用索引最重要的条件是查询条件中需要使用索引。

# 把dept表中,我增加几个部门:

alter table dept add index my_ind (dname,loc); // dname 左边的列,loc就是右边的列

说明,如果我们的表中有复合索引(索引作用在多列上), 此时我们注意:

  • 对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。

        explain select * from dept where loc='aaa'\G  // 不会使用到索引
  • 对于使用like的查询,查询如果是 %aaa 不会使用到索引, aaa% 会使用到索引。

        explain select * from dept where dname like '%aaa'\G
        /*不能使用索引,即在like查询时,关键的 ‘关键字’ , 最前面,不能使用 % 或者 _ 这样的字符., 如果一定要前面有变化的值,则考虑使用 全文索引->sphinx.*/
  • 如果条件中有 or,即使其中有部分条件带索引也不会使用。换言之,就是要求使用的所有字段,都必须建立索引, 我们建议大家尽量避免使用 or 关键字。

  • 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不使用索引。(添加时,字符串必须 用单引号 ’ ’ 包起来), 也就是,如果列是字符串类型,就一定要用 ’ ’ 把他包括起来.

  • 如果mysql估计使用全表扫描要比使用索引快,则不使用索引。


查看索引的使用情况

show status like ‘Handler_read%’;

注意

  • handler_read_key: 这个值越高越好,越高表示使用索引查询到的次数。
  • handler_read_rnd_next: 这个值越高,说明查询低效。
版权声明:本文为博主原创文章,未经博主允许不得转载。

[MySQL 工具] pt-index-usage使用 --> 对查询中的索引进行分析

pt-index-usage¶ pt-index-usage 从日志里面读取查询,并且分析它们是如何使用索引的. 概述: 使用 pt-index-usage [OPTIONS] [FILES] ...
  • mchdba
  • mchdba
  • 2013年11月08日 16:01
  • 5117

禁用myeclipse updating indexes与大幅优化myeclipse的速度&关闭自动更新

(转载) 禁用myeclipse updating indexes MyEclipse 总是不停的在 Update index,研究发现Update index...是Ma...
  • pianistOfSoftware
  • pianistOfSoftware
  • 2016年07月15日 11:03
  • 2549

【MOOC】Python网络爬虫与信息提取-北京理工大学-part 4

网络爬虫之框架1.scrapy爬虫框架介绍1.1.scrapy爬虫框架介绍安装方法: 简要地说,Scrapy不是一个函数功能库,而是一个快速功能强大的网络爬虫框架。 (爬虫框架是实现爬虫功能的一个...
  • linzch3
  • linzch3
  • 2017年03月08日 10:54
  • 1518

MySql 常用命令及问题处理

启动等启动:1、使用 service 启动:service mysqld start 2、使用 mysqld 脚本启动:/etc/init.d/mysqld start 3、使用 safe_mys...
  • xundh
  • xundh
  • 2015年09月14日 18:10
  • 1063

【mysql】mysql有哪些权限

mysql 权限
  • liang_0609
  • liang_0609
  • 2016年09月08日 17:41
  • 1960

MYSQL基础02 - 索引的操作

--索引 1.索引包含: 主键,唯一,普通单一,普通组合索引,全文索引,空间索引,HASH索引 2.索引创建 3.索引删除 4.索引的使用场景和约束 mysql> desc t1 -> ; ...
  • launch_225
  • launch_225
  • 2015年06月03日 22:53
  • 1485

关于 最优化/Optimization 的一些概念解释

转载请注明出处:http://www.codelast.com/   以下是我曾在学习“最优化”理论与实践中遇到的一些概念,我刚开始学的时候,有些东西看了很多遍都还觉得很别扭、晦涩难懂,在...
  • shenxiaolong188
  • shenxiaolong188
  • 2015年12月09日 12:19
  • 901

每日一记-mysql中的int(11)-int(4)和int类型

每日一记-mysql中的int(11)-int(4)和int类型
  • santta
  • santta
  • 2016年08月03日 13:41
  • 3022

MySQL权限管理

用户和权限管理: 语法 grant 权限 on 数据库.数据表 to '用户' @ '主机名'; 例:给 xiaogang 分配所有的权限 grant all on *.* to 'xiaogang'...
  • u013660039
  • u013660039
  • 2016年11月25日 11:23
  • 4491

使用Part上传附件

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ ...
  • kcj991932907
  • kcj991932907
  • 2014年11月27日 21:01
  • 621
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL Optimization Part 4 - Indexes Usage
举报原因:
原因补充:

(最多只允许输入30个字)