优化MySQL极限偏移的一个示例
一个简单的优化是使用覆盖查询(覆盖索引)查询,然后用整行进行连接操作:
复制代码代码如下所示:
SQL SELECT * FROM user_order_info极限1000000,5 >;
这个语句可以被优化为:
复制代码代码如下所示:
SELECT * FROM user_order_info内连接(选择引脚从user_order_info极限1000000,5)为;
SQL >解释选择*从user_order_info极限1000000,5;
+ -- + + + + ------------- ----------------- ------ --------------- + ------ + --------- + ------ ---------- ------- + + +
我select_type表| | | |型possible_keys关键key_len | | | | REF |行|额外|
+ -- + + + + ------------- ----------------- ------ --------------- + ------ + --------- + ------ ---------- ------- + + +
| 1 |简单| user_order_info |所有|零零零零| | | | 23131886 | |
+ -- + + + + ------------- ----------------- ------ --------------- + ------ + --------- + ------ ---------- ------- + + +
1行集(0秒)
>解释扩展SQL SELECT * FROM user_order_info内连接(选择引脚从user_order_info限制);
+ -- + + + + ------------- ----------------- -------- --------------- + + + + --------- --------- --------- ---------- ---------- ------------- + + +
我select_type表| | | |型possible_keys关键key_len | | | |参考行过滤额外的| | | |
+ -- + + + + ------------- ----------------- -------- --------------- + + + + --------- --------- --------- ---------- ---------- ------------- + + +
| 1 |初级| |所有|零零零零| | | | 5 | 100 | |
| 1 |初级user_order_info eq_ref初级| | | |初级| 42 | lim.pin | 1 | 100 | |
| 2 |衍生| user_order_info指数空主| | | | 42 |空| 23131886 | 100 |使用索引|
+ -- + + + + ------------- ----------------- -------- --------------- + + + + --------- --------- --------- ---------- ---------- ------------- + + +
3行,1警告(0.66秒)
根据两对比解释,可以清楚地发现,第一个不使用索引,扫描23131886行,第二扫描行数相同,但指数提高使用效率。这可以让你把数据直接使用索引而不是查询表,并在发现所需的数据,另一列是与全表获得加入。