/*
mysql 排序分页查询问题一览(1)
limit 起始值越大,查询速度越慢的问题,大家众所周知。但是,关于limit还有别的问题,我相信就不是所有人都知道了
*/

select * from t_order tmp1 order by created_time desc limit 1200000,3;
/*
查询时间:8.287s
rows:
第一个字段结果:
10416374287
20150816161010416373797
10416102702

实际结果有误差
*/

EXPLAIN
select * from t_order tmp1 order by created_time desc limit 1200000,3;
/*
mysql针对大量数据的全表查询,采用文件排序的方式进行,扫描全表,不会使用索引,查询速度慢,而且会导致分页数据不准,极不推荐
EXPLAIN:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | tmp1 | ALL | null | null | null | null | 1073690| Using filesort
*/

EXPLAIN
select * from t_order tmp1 order by created_time desc limit 10,3;

/*
mysql针对少量数据的全表查询,采用索引,查询速度块,数据无误
EXPLAIN:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | tmp1 | index | null | idx_t_order_create_time_order_type | 11 | null | 13 | null
*/


select order_no from t_order tmp1 order by created_time desc limit 1200000,3;
/*
查询时间:0.476s
rows:
第一个字段结果:
10416175097
20150816161010416111002
10416111439

实际结果没误差
*/
EXPLAIN
select order_no from t_order tmp1 order by created_time desc limit 1200000,3;
/*
mysql针对指定个别字段的查询,采用索引,查询速度块,数据无误
EXPLAIN:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | tmp1 | index | null | idx_t_order_create_time_order_type | 11 | null | 1073700| Using index
*/



/* 走索引调整优化查询 */

select * from (
select order_no from t_order tmp1 order by created_time desc limit 1200000,3
) as tmp3
LEFT JOIN t_order tmp2 on tmp2.order_no = tmp3.order_no
/*
查询时间:0.475s
rows:
第一个字段结果:
10416175097
20150816161010416111002
10416111439

实际结果没误差
*/

EXPLAIN
select * from (
select order_no from t_order tmp1 order by created_time desc limit 1200000,3
) as tmp3
LEFT JOIN t_order tmp2 on tmp2.order_no = tmp3.order_no
/*
mysql针对指定个别字段的查询,采用索引,查询速度块,数据无误
EXPLAIN:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | PRIMARY | <derived2> | ALL | null | null | null | null | 1073644| null
1 | PRIMARY | tmp2 | eq_ref | PRIMARY | PRIMARY | 194 | tmp3.order_no | 1 | null
1 | SIMPLE | tmp1 | index | null | idx_t_order_create_time_order_type | 11 | null | 1073700| Using index
*/

/*
那么,针对商品的情况,我们就需要了解一个具体的值,mysql什么时候会启用文件排序?
*/
分类: mysql

guolin

guolin

相信世界,向往美好,记录成长过程,分享个人心得,充实平凡生活。 网站信条:因为喜欢,所以热爱。

1 条评论

JimmiXzSw · 2017年2月19日 上午9:07

CclGlm http://www.FyLitCl7Pf7ojQdDUOLQOuaxTXbj5iNG.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注