图2 session A和session B的执行流程
这里,session A的操作你已经很熟悉了,它就是开启了一个事务。随后,session B把数据都删
除后,又调用了 idata这个存储过程,插入了10万行数据。
这时候,session B的查询语句select * from t where a between 10000 and 20000就不会再选择
索引a了。我们可以通过慢查询日志(slow log)来查看一下具体的执行情况。
为了说明优化器选择的结果是否正确,我增加了一个对照,即:使用force index(a)来让优化器强
制使用索引a(这部分内容,我还会在这篇文章的后半部分中提到)。
下面的三条SQL语句,就是这个实验过程。
第一句,是将慢查询日志的阈值设置为0,表示这个线程接下来的语句都会被记录入慢查询日
志中;
第二句,Q1是session B原来的查询;
第三句,Q2是加了force index(a)来和session B原来的查询语句执行情况对比。
如图3所示是这三条SQL语句执行完成后的慢查询日志。
set long_query_time=0;
select * from t where a between 10000 and 20000; /*Q1*/
select * from t force index(a) where a between 10000 and 20000;/*Q2*/
评论0
最新资源