zoukankan      html  css  js  c++  java
  • MySQL重温笔记-索引

      mysql分客户端、服务层、存储引擎层,而索引的实现就是在存储引擎层,因此各个不同的存储引擎之间的索引都有细微的差别。

    【B-Tree索引】

      

    • MyIsam使用前缀压缩技术使得索引更小,Innodb则按照原数据格式进行存储
    • MyIsam索引通过数据的物理位置引用被索引的行,Innodb则根据主键引用被索引的行。
    • 索引树中的节点是有序的,所以索引适合全键值、键值范围或键前缀查找(最左)。因为是顺序的,所以也适合排序。
    • 联合索引的索引顺序很重要

    【哈希索引】

    • 基于哈希实现。
    • 只有Memory引擎显式支持哈希索引
    • 哈希索引只包含哈希值和行指针,而不存储字段值
    • 哈希索引数据并不是按照索引值顺序存储的
    • 哈希索引不支持部分索引列匹配查找,哈希索引值是使用索引列全部内容来计算哈希值的
    • 哈希索引只支持等值比较查询
    • 访问哈希索引的数据比较快,但是有多哈希值冲突的风险。

    【全文索引】

      查找匹配的是文本中的关键词,类似于搜索引擎


    【索引的优点】

    • 减少表数据的扫描数量,不用全表扫描了
    • 避免排序和临时表【索引按顺序的,节省了排序时间】。
    • 将随机I/O变为顺序I/O

    【重点】【高效实用索引的技巧】

    1. 在索引列不要进行计算,例如下
      select student_id from student where student_id + 1 =5;
    2. 给text类型添加索引时,可以使用前缀索引,就是将值的内容截取一部分作为索引。

    3.  联合索引(多列索引)要注意列顺序。一般是考虑的因素是,使用率最高的列放到索引前列,避免随机IO,排序。

    4. 聚簇索引,表示数据行和相邻的键值紧凑的存储在一起。innodb默认会拿主键作为聚簇索引,若没有主键,就是用非空索引,主键为顺序的整数更加有利。
    5. 表中的索引越多,插入的速度越慢,准确的说是insert  update delete 
    6. 索引可以让查询锁定更少的行
    7. 确保任何group by和order by中的表达式只涉及到一个表中的列。
    8. 除非确实需要服务器小虫重复的行,否则一定要使用union all,mysql是通过创建临时表的方式来执行union查询。

    【MySQL能够使用三种方式应用WHERE条件,从好到坏的顺序为】

    1. 在索引中使用where条件来过滤不匹配的记录,在存储引擎层完成
    2. 使用索引覆盖扫描来返回记录,直接从索引中过滤不需要的记录并返回命中的结果,在服务器层完成的
    3. 从数据表返回数据。

    【查询的执行流程】

      

  • 相关阅读:
    (转)asp.net页面出错时的处理方法
    Angular.js学习笔记 (二) H.U.C
    一套常用的css初始化样式 H.U.C
    hexo工具介绍及使用方法 H.U.C
    Angular.js学习笔记 (一) H.U.C
    Nhibernate 对view 查询的几种方法
    如何做类似google的Textbox的AutoComplete增强版,可以显示多列
    POS 打印机编程控制
    (转) 商品损耗控制
    win 2008 IIS 7 安装 PHPMYAdmin
  • 原文地址:https://www.cnblogs.com/ymkfnuiwgij/p/8642587.html
Copyright © 2011-2022 走看看