聚簇索引
聚簇索引存的是主键,它的叶子节点存的是这一行的数据
根据主键查询是,直接会得到这一行的数据
普通索引
普通索引存的是索引值,它的叶子节点是主键,如果主键的是个很长的字符串会占用很大物理空间,建议用自增ID
根据普通索引查询时,会拿到主键的值,然后再根据主键去拿对应的行数据,这就是所谓的回表,
如果只是根据普通索引查询主键,就会在查询的时候返回叶子节点,不会在进行回表,这叫索引覆盖
普通索引里会有唯一索引和联合索引俩个特例
唯一索引在插入和修改时会校验索引的值会不会重复,数据库开销比较大
联合索引会根据声明的顺序把字段拼接在一起,构成索引,在查询时遵循最左匹配的原则
索引使用注意问题 :
(1)以下需要注意不使用索引
<>, NOT IN, LIKE %_开头
<>,!= 可以用 a>1 or a<3 代替,NOT IN 可以用NOT exists代替
(2)在使用max() min()时最好加上索引.
(3)单索引要创建在确实需要的地方.
多列索引 有最佳左前缀特性 所以尽量左边的字段是最常用的.
(4)索引不会包括有NULL值,就是有NULL,索引就失效
(5)使用短索引,一个字段字太多,可以建立部分索引,只取前十个字.节约空间.
(6)不要在列上运算.例如:where MD5(“password”) = “myz”
你要取desc记录,可以按desc建立索引
id,c_t desc
sql 执行顺序
from
where
group by
having
select
distinct
union
order by
limit