对于mysql建表稍有点经验的开发人员都会为后续的where查询条件提前考虑创建索引。
这里说的是在使用索引查询时有关索引下推的有关知识点。
综合前人的经验结果:索引下推是数据库检索数据过程中为减少回表次数而做的优化。
判断是否需要回表的是由mysql存储引擎控制,默认从mysql5.6版本开始支持。
下面用docker分别创建基于mysql5.5和mysql5.6的容器,表结构保持一致(docker创建mysql容器不做演示)。
首先看mysql5.5:
mysql> select version();+-----------+| version() |+-----------+| 5.5.62 |+-----------+1 row in set (0.00 sec)mysql> show create table testhh\G;*************************** 1. row *************************** Table: testhhCreate Table: CREATE TABLE `testhh` ( `id` int(10) unsigned NOT NULL, `age` int(10) unsigned DEFAULT '0', `name` char(10) NOT NULL DEFAULT '', `height` int(10) NOT NULL DEFAULT '0', `name2` char(10) NOT NULL DEFAULT '', `height2` int(10) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `age_index` (`age`) USING HASH, KEY `un` (`name`,`height`)) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)ERROR:No query specifiedmysql> explain select * from testhh where name like 'a%' and height = 100\G;*************************** 1. row *************************** id: 1 select_type: SIMPLE table: testhh type: rangepossible_keys: un key: un key_len: 14 ref: NULL rows: 1 Ext.........