MySQL索引的使用规则和设计原则

2023-03-30  本文已影响0人  萧修

SQL提示

user 建议其使用哪个索引

select *from tb user index(xx) where pro = '';

ognore 忽略其索引使用

select *from tb agnore index(xx) where pro = '';

force 强制其使用索引

select * from tb force index(xx) where pro = '';

覆盖索引和回表查询

覆盖索引

尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中,已经全部找到),减少select*。

回表查询

以每个字段为建立的索引(包括联合索引),在此索引表找不到需要返回的数据,就需要从聚集索引中查找,这个过程叫做回表查询。

前缀索引

当字段类型为字符串(varchar、text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率。此时可以只将字符串的一部分前缀,建立索引,这样大大节约索引空间,从而提高效率。

#建立前缀索引语法
create index idx_xxx on table_name(column(n))

索引长度

可以根据索引的选择性来确定,而选择性指不重复的索引值和数据表的记录总数的比值,索引选择性越高查询效率越高,唯一索引的选择性为1,最好的索引,性能最好。

查询某字段数值不重复

#不重复distinct
select count(distinct email) from tb_name;

#选择性
select count(distinct email)/count(*) from tb_name;

单列联合索引

单列索引:即一个索引只包含单个列
联合索引:即一个索引包含多个列
业务场景 ,查询多个字段,优先使用联合索引

索引设计原则

  1. 数据量大,且查询比较频繁的表建立索引
  2. 针对常作为查询条件,排序,分组操作的字段建立索引
  3. 选择区分度高的建立索引,区分度高,查询效率高
  4. 字符串类型,尽量选择前缀索引
  5. 尽量使用联合索引
  6. 控制索引数量,占据磁盘
  7. 索引列的null,使用not null约束,有助于数据库自我识别
上一篇下一篇

猜你喜欢

热点阅读