物理查询优化之索引

索引是建立在表上的,本质上是通过索引直接定位表的物理元组,加速数据获取的方式,所以索引优化应该归属到物理查询优化阶段。

1. 如何利用索引

通常查询优化器所使用索引的原则如下:

 索隐裂座位条件出现在WHERE、HAVING、ON 子句中,这样有利于索引过滤元组;

  索引列是被链接的表对象的列且存在于连接条件中;

 还有一些情况可以使用索引,如排序操作、在索引列上球MIN、MAX等。

1.1 示例:

create table A(a1 int unique,a2 varchar(10),a3 int); (a1列上创建隐含索引)

  对表做查询,没有列对象作为过滤条件(如出现在WHERE子句中),只能顺序扫描

    mysql> explain extended select * from A;
  +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------+
  | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
  +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------+
  |  1 | SIMPLE      | A     | ALL  | NULL          | NULL | NULL    | NULL |    1 |   100.00 | NULL  |
  +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------+

   type = ALL 表示 顺序扫描或范围扫描,不是用索引,顺序扫描,直接读取表上的数据(访问数据文件)。

对表做查询,有列对象列且索引列作为过滤条件,可作为索引扫描

    mysql> explain extended select * from A where a1 >2;
    +----+-------------+-------+-------+---------------+------+---------+------+------+----------+-----------------------+
    | id | select_type | table | type  | possible_keys | key  | key_len | ref  | rows | filtered | Extra                 |
    +----+-------------+-------+-------+---------------+------+---------+------+------+----------+-----------------------+
    |  1 | SIMPLE      | A     | range | a1            | a1   | 5       | NULL |    1 |   100.00 | Using index condition |
    +----+-------------+-------+-------+---------------+------+---------+------+------+----------+-----------------------+

    t ype = range 表示基于索引做范围扫描。Using index condition 表示尝试通过索引来获取

对表做查询,索引列被运算符“-” 处理,查询优化器不能再执行前进行取反操作,不可利用索引,只能顺序扫描。

select A.* from A where -A.a1 = -2; (不能利用索引)

select A.* from A where  A.a1 =  2; (利用索引)

对表做查询,选择条件不包括索引列,只能顺序扫描

 select A.* from A where A.a3 = 2;

 索引列参与了运算,不能使用索引

 se

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值