mysql联合索引查询优化

在利用B-Tree索引进行查询的过程中,有几点注意事项,我们以表A进行说明。其中表A的定义如下:

  create table A(id int auto_increment primary key, name varchar(10), age tinyint, sex enum('男','女'), birth datatime, key(name,age,sex)); id为主键,并在name,age,sex列上建立了联合索引。

以下关于联合索引查询:

  1. 全值匹配:指和索引中的所有列进行匹配,例如查找name='Jone' and age=13 and sex='男'的人;
  2. 匹配最左前缀:指用索引的第一列name,如where name='Jone',该查询只使用了索引的第一列
  3. 匹配列前缀:匹配索引列值的开头,如where name like 'J%',查找名字以J开头的人;
  4. 匹配范围值:例如查找年龄在10-30之间的Jone,where name='Jone' and age between 10 and 30;
  5. 如果不是按照索引的最左列进行查找,则无法使用索引,如当仅查找表A中年龄为15岁的人时则无法使用索引;
  6. 不能跳过索引中的列,如查找表A中名字为Jone且为男性的人,则索引只能使用name列,无法使用sex列;
  7. 查询中索引的某列是范围查询,则该列后的查询条件将不能使用索引。

你可能感兴趣的:(hibernate)