优化MySQL极限偏移的一个示例
一个常见的问题是,限制的偏移量太高,如极限100000,20,这样系统会查询100020项,然后把前面的100000。这是一个昂贵的操作,导致查询速度变慢。假设所有的分页页面访问相同的频率,和这样一个查询平均一半数据的扫描表。优化方法是限制页面访问次数或增加在高偏置的查询效率。
一个简单的优化是使用覆盖查询(覆盖索引)查询,然后用整行进行连接操作:
复制代码代码如下所示:
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行,第二扫描行数相同,但指数提高使用效率。这可以让你把数据直接使用索引而不是查询表,并在发现所需的数据,另一列是与全表获得加入。
tag:优化示例极限电脑软件mysql
相关内容