searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

单个索引和联合索引

2023-10-16 07:29:25
0
0

利用索引,可以缩小搜索的范围,加快查询速度,但使用一个具有两列的联合索引不同于使用两个单独的索引。

多个单列索引在多条件查询时优化器会优先选择最优索引策略,可能只用一个索引,也可能将多个索引全用上。但多个单列索引底层会创建多个B+索引树,比较占用空间,也会浪费一定搜索效率,故如果只有多条件联合查询时最好建联合索引。

建立联合应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,联合索引非常有用;仅对后面的任意列执行搜索时,联合索引则没有用处。

例如建一个my_user表表

CREATE TABLE my_user(
  user_name VARCHAR(32),
  email VARCHAR(32),
  phone VARCHAR(32)
)

创建联合索引:

ALTER TABLE my_user ADD INDEX idx_name_email_phone(user_name,email,phone)。

相当于创建了(user_name)、(user_name,email)和(user_name,email,phone)三个索引,这就是最左匹配原则。

  • 满足复合索引的最左特性,哪怕只是部分,复合索引生效:select * from my_user where user_name="myName"。
  • 没有出现左边的字段,则不满足最左特性,索引失效:select * from my_user where email="myEmail" and phone="myPhone"。
  • 复合索引全使用,按左侧顺序出现,索引生效:select * from my_user where user_name="myName" and email="myEmail" and phone="myPhone"
  • 虽然违背了最左特性,但MySQL执行SQL时会进行优化,底层进行颠倒优化,索引生效:select * from my_user where email="myEmail" and phone="myPhone" and user_name="myName"
0条评论
作者已关闭评论
黄****林
5文章数
0粉丝数
黄****林
5 文章 | 0 粉丝
原创

单个索引和联合索引

2023-10-16 07:29:25
0
0

利用索引,可以缩小搜索的范围,加快查询速度,但使用一个具有两列的联合索引不同于使用两个单独的索引。

多个单列索引在多条件查询时优化器会优先选择最优索引策略,可能只用一个索引,也可能将多个索引全用上。但多个单列索引底层会创建多个B+索引树,比较占用空间,也会浪费一定搜索效率,故如果只有多条件联合查询时最好建联合索引。

建立联合应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,联合索引非常有用;仅对后面的任意列执行搜索时,联合索引则没有用处。

例如建一个my_user表表

CREATE TABLE my_user(
  user_name VARCHAR(32),
  email VARCHAR(32),
  phone VARCHAR(32)
)

创建联合索引:

ALTER TABLE my_user ADD INDEX idx_name_email_phone(user_name,email,phone)。

相当于创建了(user_name)、(user_name,email)和(user_name,email,phone)三个索引,这就是最左匹配原则。

  • 满足复合索引的最左特性,哪怕只是部分,复合索引生效:select * from my_user where user_name="myName"。
  • 没有出现左边的字段,则不满足最左特性,索引失效:select * from my_user where email="myEmail" and phone="myPhone"。
  • 复合索引全使用,按左侧顺序出现,索引生效:select * from my_user where user_name="myName" and email="myEmail" and phone="myPhone"
  • 虽然违背了最左特性,但MySQL执行SQL时会进行优化,底层进行颠倒优化,索引生效:select * from my_user where email="myEmail" and phone="myPhone" and user_name="myName"
文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0