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. nyoj 黑色帽子

    黑色帽子 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述         最近发现了一个搞笑的游戏,不过目前还没玩过.一个舞会上,每个人头上都戴着一顶帽子,帽子只有黑 ...

  2. Microsoft dynamic sdk中join应该注意的问题.

    QueryExpression queryNextSeq = new QueryExpression { EntityName = "ep_prodoperationsequence&quo ...

  3. Mysql数据库主从配置

    一.为什么要使用数据库主从架构 一个网站损耗资源最厉害的就是数据库,最易崩溃的也是数据库,而数据库崩溃带来的后果是非常严重的.数据库分为读和写操作,在实际的应用中,读操作的损耗远比写操作多太多,因此读 ...

  4. httpClient解决post请求重定向的问题

    import com.dadi.saas.util.HTTPUtils; import org.apache.commons.httpclient.Header; import org.apache. ...

  5. Cookie、Session登陆验证相关介绍和用法

    一.Cookie和Session 首先.HTTP协议是无状态的:所谓的无状态是指每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应直接影响,也不会直接 ...

  6. jdk的server模式修改无效(关于client和server模式)

    本机为64位操作系统,64位jdk,win10. 修改C:\Program Files\Java\jre8\lib\amd64\jvm.cfg无效. 我的文件的内容为: 原因参考如下: http:// ...

  7. python3全栈开发-面向对象、面向过程

    一. 什么是面向对象的程序设计及为什么要有它 1.面向过程 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种 ...

  8. 【WebGL入门】画一个旋转的cube

    最近搜罗了各种资料,发现WebGL中文网特别好用,很适合新手入门:http://www.hewebgl.com/article/getarticle/50 只需要下载好需要的所有包,然后用notepa ...

  9. 最小二乘法多项式拟合的Java实现

    背景 由项目中需要根据一些已有数据学习出一个y=ax+b的一元二项式,给定了x,y的一些样本数据,通过梯度下降或最小二乘法做多项式拟合得到a.b,解决该问题时,首先想到的是通过spark mllib去 ...

  10. C#:多进程开发,控制进程数量

    正在c#程序优化时,如果多线程效果不佳的情况下,也会使用多进程的方案,如下: System.Threading.Tasks.Task task=System.Threading.Tasks.Task. ...