MYSQL支持的索引类型
  BTREE索引
    特点:
      通过引用以B+权的结构存储数据
      能够加快数据的查询速度
      更适合进行范围查找
    应用:
      全值匹配的查询 =
      匹配最左前缀的查询
      匹配列前缀查询 LIKE 'XX%'
      匹配范围值的查询
      精确匹配左前列并范围匹配另外一列
      只访问索引的查询
    使用限制:
      如果不是按照索引最左列查找,则无法使用索引
      使用索引时不能跳过索引中的列,否则只能部分使用或不能使用
      NOT IN 和 <> 操作无法使用索引
      如果查询中有某个列的范围查询,则其右边所有列都无法使用索引

  HASH索引(INNODB自动生成,无法手动创建)
    是基于HASH表实现的,只有查询条件精确匹配,HASH索引中的所有列时,才能使用HASH索引。
    对于HASH索引中的所有列,存储引擎都会为每一行计算一个HASH码,HASH索引中存储的就是HASH码。
    必须进行二次查找
    无法用于排序
    不支持部分索引查找也不支持范围查找
    HASH码计算可能存在HASH冲突

为什么要使用索引?
  索引大大减少了存储引擎需要扫描的数据量
  索引可以帮助我们进行排序以避免使用临时表
  索引可以把随机IO变为顺序IO

索引带来的问题?
  索引会增加写操作的成本
  太多的索引会增加查询优化器的选择时间

索引优化策略
  索引列上不能使用表达式或函数
  前缀索引和索引列的选择性
  联合索引
    如何选择索引列的顺序:经常会使用到的列优先;选择性高的列优先;宽度小的列优先;
  覆盖索引
    优点:可以优化缓存,减少磁盘IO操作;可以减少随机IO,变随机IO操作为顺序IO操作;可以避免对INNODB主键索引的二次查询;可以避免MYISAM表进行系统调用。
    无法使用覆盖索引的情况:存储引擎不支持覆盖索引;查询中使用了太多的列;使用了双%号的LIKE查询;

使用索引扫描来优化排序的条件:
  索引的列顺序和ORDER BY 子句的顺序完成一致
  索引中所有列的方向(升降序)和ORDER BY 子句的顺序完成一致
  ORDER BY 中的字段全部在关联表中的第一张表中

模拟HASH索引优化查询
  用MD5,用BTREE索引进行模拟,需要单独建一列保存MD5值
  只能处理键值的全值匹配查找
  所使用的HASH函数决定着索引键的大小


使用索引来优化查询
  利用索引优化锁
  索引可以减少锁定的行数
  索引可以加快处理速度,同时也加快了锁的释放。

索引的维护和优化
  删除重复和冗余的索引 pt-duplicate-key-checker h=127.0.0.1
  查找未被使用过的索引
  mysql>SELECT object_schema,object_name,index_name,b.TABLE_ROWS FROM `performance_schema`.table_io_waits_summary_by_index_usage a join information_schema.`TABLES` b on a.object_schema=b.TABLE_SCHEMA and a.object_name=b.TABLE_NAME where index_name is not null and count_star=0 order by object_schema,object_name;

更新索引统计信息及减少索引碎片
  analyze table table_name
  optimize table table_name 使用会锁表

Mysq 索引优化的更多相关文章

  1. Mysq索引优化(什么情况创建索引,什么情况不创建索引)

    一.以下情况需要创建索引 1.主键自动建立唯一索引 2.频繁作为查询条件的字段应该创建索引 3.查询中与其他表关联的字段,外键关系建立索引 4.单键/组合索引的选择问题,组合索引性价比更高 5.查询中 ...

  2. MySQL高级学习笔记(四):索引优化分析

    文章目录 性能下降 SQL慢 执行时间长 等待时间长 查询语句写的烂 查询数据过多 关联了太多的表,太多join 没有利用到索引 单值 复合 服务器调优及各个参数设置(缓冲.线程数等)(不重要DBA的 ...

  3. mysql 高级和 索引优化,目的:查的好,查的快,性能好

    1-事物隔离级别: 更新丢失, 并发情况下,对同一字段进行更新,就会出现更新丢失,采用乐观锁,比较版本号或时间戳可解决 读未提交 解决了更新丢失但是会引起脏读, 二个session.sessionA中 ...

  4. MySQL如何利用索引优化ORDER BY排序语句

    MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度. MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作. 通 ...

  5. [转]SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】一周搞定

    对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感 谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当 ...

  6. mysql索引优化

    mysql 索引优化 >mysql一次查询只能使用一个索引.如果要对多个字段使用索引,建立复合索引. >越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和CPU缓存中都需要更少的空间 ...

  7. MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]

    对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...

  8. MySQL 数据库性能优化之索引优化

    接着上一篇 MySQL 数据库性能优化之表结构,这是 MySQL数据库性能优化专题 系列的第三篇文章:MySQL 数据库性能优化之索引优化 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引 ...

  9. mysql优化之索引优化

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

随机推荐

  1. VS系列控制台闪退解决

    查阅--->总结-->实践--> 按红色标识走 ,完美解决! 至此,完美解决:原理不深究:

  2. 06_Python的数据类型3元组,集合和字典_Python编程之路

    上一节跟大家讲了Python的列表,当然不是完整的讲完,后续我们还会提到,这一节我们还是来讲Python的数据类型 首先要讲到的就是元组 元组其实拥有列表的一些特性,可以存储不同类型的值,但在某些方面 ...

  3. JAVA_SE基础——65.StringBuffer类 ②

    字符串特点:字符串是常量:它们的值在创建之后不能更改.    字符串的内容一旦发生了变化,那么马上会创建一个新 的对象.    注意: 字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象 ...

  4. python全栈开发-json和pickle模块(数据的序列化)

    一.什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flat ...

  5. IntelliJ IDEA sass环境配置及常见报错处理

    1.下载安装ruby,网上教程很多的,安装完之后在命令行输入ruby -v检查一下是否安装成功了.(注意安装的时候要勾选第二项).

  6. GIT入门笔记(2)- 典型的工作模式

      分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库.   下图是经典的git开发过程.   Git的功能特性:   ...

  7. python入门(12)dict

    python入门(12)dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例 ...

  8. Flow简易教程——安装篇

    .mydoc_h1{ margin: 0 0 1em; } .mydoc_h1_a{ color: #2c3e50; text-decoration: none; font-size: 2em; } ...

  9. 实现GridControl行动态改变行字体和背景色

    需求:开发时遇到一个问题, 需要根据GridControl行数据不同,实现不同的效果 在gridView的RowCellStyle的事件中实现,需要的效果 private void gridView1 ...

  10. linux下mongodb安装、服务器、客户端、备份、账户命令

    在linux环境安装mongoDB: 一般认为偶数版本为稳定版 如 1.6.x,奇数版本为开发版如1.7.x 32bit的mongoDB最大能存放2g的数据,64bit没有限制 方法1: 终端执行: ...