• mysql索引 B+tree


     一、B+tree示意图

    二、为什么要用索引

    1、索引能极大减少存储引擎需要扫描的数据量:因为索引有序所以可以快速查找并且不用全表查找;

    2、索引可以把随机IO变为顺序IO:因为B+tree在数据中保存了下个数据的信息;

    3、索引在分组、排序等操作时,不使用临时表。

    三、sql数据库优化

    1、索引列数数据长度能少则少:数据也是分片的,一次可以加载回更多数据,减少磁盘io;

    2、索引不是越多越好,越全越好:只要设计索引字段修改、插入就需要调整B+tree,会降低写效率;

    3、匹配列前缀可用到索引:如 like 9999%可以利用索引,但%9999%用不到索引,因为用的是tree所以前边%不知道该往那个方向遍历;

    4、where条件中 not in 和 <>操作无法使用索引:原因如3;

    5、匹配范围值 order by 、group by也可用到索引:因为B+tree为有序存储在数据中保存了下个数据的信息;

    6、少用select *,应该指定列:因为B+tree所有数据地址都在最末一层如果需要所有数据必须找到最末层才能拿到,如果你要返回的字段正好是索引字段那只要遍历key(关键字)即可;

    7、索引列不能使用表达式或函数:原因如3;

    8、对于过长字符串创建索引可以通过创建前缀索引,注意前缀需要选择好的离散型:就是指对数据的一部分创建索引;

    9、联合索引中如果不是按照索引最左列开始查找,无法使用索引;

    10、联合索引中精确匹配最左列并范围匹配另外一列可以用到索引;

    11、联合索引中如果查询中有某个列的范围查询,则其右边的所有列都无法使用索引。

  • 相关阅读:
    Windows操作系统堆和栈的区别
    API1——CppSparseFile
    typedef struct 用法详解和用法小结
    开发人员应该用好的一些网站
    Windows编程中的堆管理
    在VC中编译、运行程序的小知识点
    Script:列出数据库中5%以上链式行的表
    解决Linux上11g的ORA00845错误
    Oracle内部错误:ORA00600[kfioTranslateIO03]一例
    Oracle内部错误:ORA00600[2608]一例
  • 原文地址:https://www.cnblogs.com/rslai/p/9905176.html
Copyright © 2020-2023  润新知