索引使用注意事项最左前缀法则
如果索引了多列数据(联合索引),要遵循最左前缀法则。
从索引的最左列开始,并且不跳过索引的列。如果跳过某一列,索引将部分失效(后面的字段也失效)。
索引列运算操作
不能再索引列上进行计算操作,不然会导致索引失效。
字符串不加引号
也会导致索引失效
模糊查询
如果只是尾部模糊匹配,索引不会失效。只要有头部模糊匹配,索引失效。
or连接的条件
用or分割开的条件,如果or前的条件有索引,or后的条件没有索引,那么涉及到的索引都不会被用到。
数据分布影响
如果MySQL评估使用索引比全表更慢,则不使用索引。
SQL提示
SQL提示是优化数据库的一个重要手段,简单来说就是在SQL语句中加入一些人为的提示来达到优化操作的目的。
1select ... from table_name use index(index_name) where ...;
use index(…):建议MySQL使用的索引
force index(…):强制MySQL使用的索引
覆盖索引
查询使用了索引,并且需要返回的列在索引中能全部找到。
using index condition:使用了 ...
MySQL索引一、概述索引(Index)是帮助MySQL高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这种数据结构以某种方式指向数据,从而实现开始的查找数据。
优点:提高数据检索效率,降低数据库IO成本,降低CPU消耗。
缺点:索引需要占用空间,降低插入、更新、修改表的效率。
二、索引结构
索引结构
描述
B+Tree
最常见的索引
Hash
基于Hash表实现,用于精确匹配,不支持范围查询
R-Tree
空间索引是MyISAM的特殊索引类型,用于地理空间数据类型
Full-Tree
通过建立倒排索引,快速匹配文档
B+Tree 二叉树的缺点:顺序插入时,会形成一个链表,查询性能降低,在大数据量的情况下,子树节点层级会较深,检索速度慢。
红黑树:有效解决了顺序插入问题,但是在大数据量的情况下,子树节点层级还是会较深,检索速度慢。
B-Tree:多路平衡查找树
B+Tree:所有数据都会出现在叶子结点,同时形成一个单向链表。
在MySQL中,对B+Tree做了优化,增加了一个指向相邻叶子节点的链表指针,形成了带有顺序指 ...