索引分为:
或者分为:
聚集索引:聚集索引存储记录是物理上连续存在,聚集索引一个表只能有一个
非聚集索引:非聚集索引是逻辑上的连续,物理存储并不连续,非聚集索引一个表可以存在多个
复合索引遵从最左前缀原则,比如说一张学生表里面的联合索引如key 'age name sex'
A:select * from student where age = 16 and name = '小张'//走索引 B:select * from student where name = '小张' and sex = '男'//直接从name开始,不走索引 C:select * from student where name = '小张' and sex = '男' and age = 18//顺序不影响,走索引
表student中两个字段age,name加了索引
A:select * from student where 'name' like '王%' //like 查询是以%开头 B:select * from student where age + 8 = 18 //用索引列进行计算 C:select * from student where concat('name','哈') ='王哈哈' //对索引列用函数了 D:select * from student where age != 18 //一些关键字会导致索引失效,例如 or, != , not in,is null ,is not unll
详情可见博客
为什么不用hash:文件系统和数据库的索引都是存在硬盘上的,并且如果数据量大的话,不一定能一次性加载到内存中。参考