• [MySQL] 使用force index强制使用索引


    1.在测试一个按照时间的范围查询时,尽管增加了索引,发现使用不到索引,可以使用这个来强制使用索引

    测试过程为,创建下面的表,以及创建了联合索引

    create table delay_delete_users(
    id int auto_increment, 
    email_id int not null default 0 comment 'email表id',
    email varchar(50) not null default '' comment '邮箱前缀',
    entid int not null default 0 comment '企业id',
    default_domain  varchar(50) not null default '' comment '默认域',
    delete_time timestamp comment '删除时间',
    clear tinyint not null default 0 comment '0未处理,1已清空',
    primary key (id),
    key email_entid(email,entid),
    key delete_time(delete_time,clear)
    )engine innodb;

    插入测试数据,进行explain查询

    insert into `delay_delete_users` (email,entid,default_domain,delete_time)value('shihan2',23684,'appdev.sinanet.com','2019-12-10 15:49:16');
    insert into `delay_delete_users` (email,entid,default_domain,delete_time,clear)value('shihan2',23684,'appdev.sinanet.com','2019-12-10 15:49:16',1);
    insert into `delay_delete_users` (email,entid,default_domain,delete_time,clear)value('shihan2',23684,'appdev.sinanet.com','2019-12-12 15:49:16',1);

    explain select * from delay_delete_users where delete_time<'2019-12-12' and clear=0; 索引没有使用到,还是进行的全表扫描,看那个扫描行数rows

    +----+-------------+--------------------+------------+------+---------------+------+---------+------+------+----------+-------------+
    | id | select_type | table              | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
    +----+-------------+--------------------+------------+------+---------------+------+---------+------+------+----------+-------------+
    |  1 | SIMPLE      | delay_delete_users | NULL       | ALL  | delete_time   | NULL | NULL    | NULL |    7 |    14.29 | Using where |

    explain select * from delay_delete_users force index(delete_time)  where delete_time<'2019-12-12' and clear=0;使用到了索引

    +----+-------------+--------------------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+
    | id | select_type | table              | partitions | type  | possible_keys | key         | key_len | ref  | rows | filtered | Extra                 |
    +----+-------------+--------------------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+
    |  1 | SIMPLE      | delay_delete_users | NULL       | range | delete_time   | delete_time | 4       | NULL |    3 |    14.29 | Using index condition |
  • 相关阅读:
    Common Lisp 参数传递的几种形式
    EF架构~基于EF数据层的实现
    标准架构~业务层到底是否应该关注数据持久化的方式
    Redis学习笔记~Redis主从服务器,读写分离
    Redis学习笔记~是时候为Redis实现一个仓储了,RedisRepository来了
    MVVM架构~knockoutjs系列之数组的$index和$data
    【Oracle】-【sqlplus / as sysdba登录报错问题】-新用户使用sqlplus / as sysdba登录报错
    Android---App Widget(一)
    Mit 分布式系统导论,Distributed Systems ,lab1 -lab6 总结,实验一到实验六总结
    GDAL切割重采样遥感图像
  • 原文地址:https://www.cnblogs.com/taoshihan/p/12031269.html
Copyright © 2020-2023  润新知