博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多列索引
阅读量:4983 次
发布时间:2019-06-12

本文共 1434 字,大约阅读时间需要 4 分钟。

  多列索引对查询的影响

  假定你发出下列SELECT语句:
    mysql> SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;
  如果一个多列索引存在于col1和col2上,适当的行可以直接被取出。
  如果分开的单行列索引存在于col1和col2上,优化器试图通过决定哪个索引将找到更少的行并来找出更具限制性的索引并且使用该索引取行。
  你可以这样创建一个多列索引:
    mysql>ALTER TABLE tbl_name ADD INDEX(col1,col2);
  而你应该这样创建分开的单行列索引:
    mysql>ALTER TABLE tble_name ADD INDEX(col1);
    mysql>ALTER TABLE tble_name ADD INDEX(col1); 
  如果表有一个多列索引,任何最左面的索引前缀能被优化器使用以找出行。例如,如果你有一个3行列索引(col1,col2,col3),你已经索引了在(col1)、(col1,col2)和(col1,col2,col3)上的搜索能力。
  如果列不构成索引的最左面前缀,MySQL不能使用一个部分的索引。
  假定你下面显示的SELECT语句:
  mysql> SELECT * FROM tbl_name WHERE col1=val1;
  mysql> SELECT * FROM tbl_name WHERE col2=val2;
  mysql> SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3; 
  如果一个索引存在于(col1、col2、col3)上,只有上面显示的第一个查询使用索引。
  第二个和第三个查询确实包含索引的列,但是(col2)和(col2、col3)不是(col1、col2、col3)的最左面前缀。

 

  如果LIKE参数是一个不以一个通配符字符起始的一个常数字符串,MySQL也为LIKE比较使用索引。

  例如,下列SELECT语句使用索引:
    mysql> select * from tbl_name where key_col LIKE "Patrick%";
    mysql> select * from tbl_name where key_col LIKE "Pat%_ck%"; 
  在第一条语句中,只考虑有"Patrick" <= key_col < "Patricl"的行。在第二条语句中,只考虑有"Pat" <= key_col < "Pau"的行。

 

  下列SELECT语句将不使用索引:

    mysql> select * from tbl_name where key_col LIKE "%Patrick%";
    mysql> select * from tbl_name where key_col LIKE other_col; 
  在第一条语句中,LIKE值以一个通配符字符开始。在第二条语句中,LIKE值不是一个常数。
  如果 column_name 是一个索引,使用column_name IS NULL的搜索将使用索引。

 

参考:

转载于:https://www.cnblogs.com/cookiehu/p/5148394.html

你可能感兴趣的文章
final修饰的类有什么特点
查看>>
关于string类中find函数的讲解
查看>>
程序员的情书
查看>>
Spring Cloud Eureka 使用 IP 地址进行服务注册
查看>>
Python 包的制作(__init__.py)
查看>>
通过时间查询
查看>>
java内存模型优化建议
查看>>
三十、模块补充
查看>>
流程审批设计
查看>>
别装了,你根本就不想变成更好的人
查看>>
数据库 join
查看>>
AES加密工具类[亲测可用]
查看>>
方法区
查看>>
Django-----ORM
查看>>
ARCGIS部分刷新
查看>>
发 零 食
查看>>
poj3613:Cow Relays(倍增优化+矩阵乘法floyd+快速幂)
查看>>
洛谷P1886 滑动窗口
查看>>
Shell编程(二)Bash中调用Python
查看>>
主动与被动监控 拓扑图组合图 自定义监控
查看>>