Mysql索引总结(一)

定义

定义:在mysql中也叫做“键(Key)”,是存储引擎用于快速找到记录的一种数据结构。

理解:索引就像是书的目录,然后找到对应章节的页码。在mysql中,存储引擎用类似的方法使用索引,先在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行。

例子:
select id from t_sign where staff_id=’123’

如果在staff_id列上建有索引,则mysql将使用该索引找到staff_id为123的行,返回数据行

索引的类型

在mysql中,索引是在存储引擎层而不是服务器层实现的。所以没有统一的索引标准。Mysql支持的索引类型有一下几种


这里写图片描述


主要说一下B-Tree索引

这里写图片描述

扫描二维码关注公众号,回复: 12141524 查看本文章

建立一个People的表

 CREATE TABLE People(
    last_name varchar(50) not null,
    first_name varchar(50) not null,
    dob        date        ,
    gender enum('m','f')  not null,
    key(last_name,first_name,dob)
 )

这里写图片描述

这里写图片描述

-- 全值搜索
select *from people where last_name='Allen' and first_name='Cuba' and dob='2018-03-07'

-- 匹配最左前缀
 select *from people where last_name='Allen'

-- 匹配列前缀
select *from people where last_name like "A%"

-- 匹配范围(要求是查询姓在Allen和Barrymore之间的人)
select *from people where last_name BETWEEN  "Allen" and "Barraymore"

-- 精确匹配某一列并范围匹配另外一列
select * from people where last_name='Allen' and first_name like "K%"



对于B-Tree索引的限制

1.如果不是按照索引最左列开始查找,无法使用,例如直接插到first_name=xxx的是无法使用索引的
2.不能跳过索引中的列。查询条件不能为last_name=xxx and birthday=xxx,不能跳过中间first_name,这样只能按照第一列索引查找
3.如果查询中有某个列的范围查询,则其右边所有列都无法使用索引优化查找
例如:where last_name=’Allen’ and first_name like ‘J%’ and birthday =‘2018-02-15’
这个查询有效的索引只要前两列

总结

这篇博客算是看《高性能Mysql》的一个读书笔记,其中的代码也有自己的实践,光看书有时候留不下什么印象,只有自己动手去做,才明白其中讲的到底是怎么一回事

猜你喜欢

转载自blog.csdn.net/cd18333612683/article/details/79468440