MySQL数据库中怎么对与范围内查询进行优化

  介绍

今天就跟大家聊聊有关MySQL数据库中怎么对与范围内查询进行优化,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

首先我们来说下在()这种方式的查询。在《高性能MySQL》里面提及用在这种方式可以有效的替代一定的范围内查询,提升查询效率,因为在一条索引里面,范围字段后面的部分是不生效的。使用在这种方式其实MySQL优化器是转化成了n * m种组合方式来进行查询,最终将返回值合,并有点类似联盟但是更高效。同时它存在这一些问题:

老版本的MySQL在在()组合条件过多的时候会发生很多问题。查询优化可能需要花很多时间,并消耗大量内存。新版本MySQL在组合数超过一定的数量就不进行计划评估了,这可能导致MySQL不能很好的利用索引。

这里的“一定数量”在MySQL5.6.5以及以后的版本中是由eq_range_index_dive_limit这个参数控制(感谢@叶金荣同学的指点)。默认设置是10,一直到5.7以后的版本默认会修改成200年,当然我们是可以手动设置的。我们看下5.6手册中的说明:

eq_range_index_dive_limit系统变量允许您配置的值的数量优化器开关从> SELECT * pre_forum_post tid=7932552和“看不见的”(& # 39;0 & # 39;& # 39;2 & # 39;)   ORDER BY国际日期变更线DESC限制10;

索引如下:

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +   表| | Non_unique | Key_name | Seq_in_index | Column_name |基数排序| | Sub_part | |空包装| Index_type |评论| Index_comment |   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +   主要| pre_forum_post | 0 | | 1 | tid | |空零零| | | | BTREE | | |   主要| pre_forum_post | 0 | | 2 | |位置零零| | | 25521392 | | BTREE | | |   | pre_forum_post | 0 | pid | 1 | | pid零零| | | 25521392 | | BTREE | | |   | pre_forum_post | 1 | fid | 1 | fid |零零| | | 1490 | | BTREE | | |   | pre_forum_post | 1 | displayorder | 1 | tid |零零| | | 880048 | | BTREE | | |   | pre_forum_post | 1 | displayorder | 2 | |看不见零零| | | 945236 | | BTREE | | |   | pre_forum_post | 1 | displayorder | 3 |国际日期变更线|一个零零| | | 25521392 | | BTREE | | |   | pre_forum_post | 1 | | 1 | tid |零零| | | 880048 | | BTREE | | |   | pre_forum_post | 1 | | 2 | |一个零零| | | 1215304 | | BTREE | | |   | pre_forum_post | 1 | new_auth | 1 | authorid |一个零零| | | 1963184 | | BTREE | | |   | pre_forum_post | 1 | new_auth | 2 | |看不见一个零零| | | 1963184 | | BTREE | | |   | pre_forum_post | 1 | new_auth | 3 | |的tid零零| | | 12760696 | | BTREE | | |   | pre_forum_post | 1 | idx_dt | 1 |国际日期变更线|一个零零| | | 25521392 | | BTREE | | |   | pre_forum_post | 1 | mul_test | 1 | tid |零零| | | 880048 | | BTREE | | |   | pre_forum_post | 1 | mul_test | 2 | |看不见零零| | | 945236 | | BTREE | | |   | pre_forum_post | 1 | mul_test | 3 |国际日期变更线|一个零零| | | 25521392 | | BTREE | | |   | pre_forum_post | 1 | mul_test | 4 | pid |零零| | | 25521392 | | BTREE | | |   + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

看下执行计划:

 root@localhost 16:08:27 [ultrax]比;解释SELECT * FROM pre_forum_post tid=7932552和“看不见的”(& # 39;0 & # 39;& # 39;2 & # 39;)
  →按国际日期变更线DESC限制10;
  + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  | | id select_type表| | |型possible_keys关键| | key_len | ref额外| | |行
  + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  | 1 |简单| pre_forum_post | |主要范围,displayorder,首先,mul_test, idx_1 | displayorder零54 | | | 4 |使用指数条件;使用filesort |
  + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  1行集(0.00秒)

MySQL数据库中怎么对与范围内查询进行优化