数据库中使用联合索引
数据库中使用联合索引
假设某表 T 建立联合索引 Union_ABC,该联合索引中包含表 T 中的字段 A、B、C,并且联合索引列的顺序也是 A、B、C。注意索引列的顺序,因为在联合索引中数据库执行器在执行前会根据你所创建的联合索引的列的顺序进行优化,如果查询条件中不是按照联合索引中列的顺序写的,那么数据库执行器在执行前也会强制转换成联合索引的列的顺序在执行。
因此,建议:
1、在设置联合索引的时候按照最左匹配原则、使用频次多的、离散程度高的、占用空间小的放到第一位,其它位依次类推,合理规划联合是索引的位次。
2、在写 SQL 查询语句的时候严格按照联合索引的位次进行书写,这样就省掉了让数据库执行器执行前优化索引列位次的操作,一定意义上加快了查询效率。
如:小明写的 SQL 语句: select A ,B,C from T where B=2 and C =3 and A =1
优化后的 SQL 语句: select A ,B,C from T where A =1 and B=2 and C =3
在数据库中如果使用联合索引,那么什么情况下是不走索引的哪,从而导致查询效率慢?
回答:
1、在使用联合索引的时候,当联合索引的第一个列不在 where 条件语句中,并且所查询的列其中有的是没有建立索引的列,那么这个联合索引就是无效的!
如:select A ,B,C,D from T where B=1
2、在使用联合索引的时候,当联合索引的第一个列不在 where 条件语句中,并且所查询的条件中有的是没有建立索引的列,那么这个联合索引就是无效的!
如:select A ,B,C from T where B=1 and D = 2
3、第一个列既不在 where 条件语句中,所查询的列其中又有的是没有建立索引的列,所查询的条件中还有的是没有建立索引的列,那么这个联合索引就是无效的!
如:select A ,B,C,D from T where B=1 and D = 2
================================================================================================
在数据库中如果使用联合索引,那么什么情况是走索引哪?
回答:
不是上面 3 种情况的均可以走联合是索引!

浙公网安备 33010602011771号