什么是数据库索引

发布时间:2026/5/25 20:42:39

什么是数据库索引 一、数据索引是干什么用的呢数据库索引其实就是为了使查询数据效率快。二、数据库索引有哪些呢聚集索引主键索引在数据库里面所有行数都会按照主键索引进行排序。非聚集索引就是给普通字段加上索引。联合索引就是好几个字段组成的索引称为联合索引。1keyidx_age_name_sex(age,name,sex)联合索引遵从最左前缀原则什么意思呢就比如说一张学生表里面的联合索引如上面所示那么下面A,B,C,D,E,F哪个会走索引呢1234A:select * from student where age 16and name 小张B:select * from student where name 小张and sex 男C:select * from student where name 小张and sex 男and age 18D:select * from student where age 20and name 小张brE:select * from student where age !15and name 小张brF:select * from student where age 15and name !小张A遵从最左匹配原则age是在最左边所以A走索引B直接从name开始没有遵从最左匹配原则所以不走索引C虽然从name开始但是有索引最左边的agemysql内部会自动转成where age 18 and name 小张 and sex 男 这种所以还是遵从最左匹配原则D这个是因为age20是范围范围字段会结束索引对范围后面索引字段的使用所以只有走了age这个索引E这个虽然遵循最左匹配原则但是不走索引因为! 不走索引F这个只走age索引不走name索引原因如上三、有哪些列子不走索引呢表student中两个字段age,name加了索引12keyidx_age(age),keyidx_name(name)1.Like这种就是%在前面的不走索引在后面的走索引12A:select * from student wherenamelike王%B:select * from student wherenamelike%小A走索引B不走索引2.用索引列进行计算的不走索引12A:select * from student where age 108B:select * from student where age 818A走索引B不走索引3.对索引列用函数了不走索引12A:select * from student where concat(name,哈) 王哈哈;B:select * from student where name concat(王哈,哈);A不走索引B走索引4. 索引列用了! 不走索引,如下1select * from student where age !18四、为什么索引用B树这个可以参考什么是B树五、索引在磁盘上的存储聚集索引和非聚集索引存储的不相同那么来说下都是怎么存储的有一张学生表create table student (id int(11) not null auto_increment comment 主键id,name varchar(50) not null default comment 学生姓名,age int(11) not null default 0 comment 学生年龄,primary key (id),key idx_age (age),key idx_name (name)) ENGINEInnoDB default charsetutf8 comment 学生信息;表中内容如下id 为主键索引name和age为非聚集索引1.聚集索引在磁盘中的存储聚集索引叶子结点存储是表里面的所有行数据每个数据页在不同的磁盘上面如果要查找id5的数据那么先把磁盘0读入内存然后用二分法查找id5的数在3和6之间然后通过指针p1查找到磁盘2的地址然后将磁盘2读入内存中用二分查找方式查找到id5的数据。2.非聚集索引在磁盘中的存储叶子结点存储的是聚集索引键而不存储表里面所有的行数据所以在查找的时候只能查找到聚集索引键再通过聚集索引去表里面查找到数据。如果要查找到name 小徐首先将磁盘0加载到内存中然后用二分查找的方法查到在指针p1所指的地址上然后通过指针p1所指的地址可知道在磁盘2上面然后通过二分查找法得知小徐id4然后在根据id4将磁盘0加载到内存中然后通过二分查找的方法查到在指针p1所指的地址上然后通过指针p1所指的地址可知道在磁盘2上面然后通过id4查找出郑正行数据就查找出name小徐的数据了。

相关新闻