[MySQL优化案例]系列 -- 取出超大结果集的技巧
2007-08-19 17:09
721 查看
作/译者:叶金荣(Email:
),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。
看看正序取得结果的耗时:
很恐怖吧,暂且不论这个SQL语句其他可以再优化的地方,把它改造成用倒序取得结果的方式试试看:
两次查询的耗时简直是天差地别:1330s VS 0.05s,。有些程序员很懒,或者没有考虑过这个问题,经常会在取结果的时候一直按照同一种排序方式,而没有考虑到当该排序方式碰到超大结果集时会变得非常慢的问题。因此,我们可以在程序中约定,当按原来的排序方式取得结果过程中,如果LIMIT START,OFFSET中的START的值超过总记录数的一定比例(例如一半),就将排序方式倒过来,虽然这么做可能会导致一些其他小问题,但我认为这是非常值得的。MySQL中文网”博客 http://www.imysql.cn/
本文出自 “爱MySQL” 博客,转载请与作者联系!
),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。
看看正序取得结果的耗时:
mysql>SELECT a.HandicapID, FROM_UNIXTIME( a.AddTime, '%y-%c-%e %H:%i' ) AS ShowAddTime, a.MatchID, a.MakerID, a.HandicapNumber ... FROM MatchHandicap AS a LEFT JOIN MatchInfo AS b ON ( a.MatchID = e.MatchID ) LEFT JOIN Team AS c ON ( e.HomeID = c.TeamID ) LEFT JOIN Team AS d ON ( e.AwayID = d.TeamID ) LEFT JOIN BookMaker AS e ON ( a.MakerID = e.MakerID ) ORDER BY a.HandicapID LIMIT 11910298, 20; ........ ........ 20 rows in set (1330 sec)
很恐怖吧,暂且不论这个SQL语句其他可以再优化的地方,把它改造成用倒序取得结果的方式试试看:
mysql>SELECT a.HandicapID, FROM_UNIXTIME( a.AddTime, '%y-%c-%e %H:%i' ) AS ShowAddTime, a.MatchID, a.MakerID, a.HandicapNumber ... FROM MatchHandicap AS a LEFT JOIN MatchInfo AS b ON ( a.MatchID = e.MatchID ) LEFT JOIN Team AS c ON ( e.HomeID = c.TeamID ) LEFT JOIN Team AS d ON ( e.AwayID = d.TeamID ) LEFT JOIN BookMaker AS e ON ( a.MakerID = e.MakerID ) ORDER BY a.HandicapID DESC LIMIT 20; ........ ........ 20 rows in set (0.05 sec)
两次查询的耗时简直是天差地别:1330s VS 0.05s,。有些程序员很懒,或者没有考虑过这个问题,经常会在取结果的时候一直按照同一种排序方式,而没有考虑到当该排序方式碰到超大结果集时会变得非常慢的问题。因此,我们可以在程序中约定,当按原来的排序方式取得结果过程中,如果LIMIT START,OFFSET中的START的值超过总记录数的一定比例(例如一半),就将排序方式倒过来,虽然这么做可能会导致一些其他小问题,但我认为这是非常值得的。MySQL中文网”博客 http://www.imysql.cn/
本文出自 “爱MySQL” 博客,转载请与作者联系!
相关文章推荐
- [MySQL优化案例]系列 -- 取出超大结果集的技巧
- [MySQL优化案例]系列 -- 带函数的查询条件
- [MySQL优化案例]系列 -- OPTIMIZE的威力
- [MySQL优化案例]系列 — slave延迟很大优化方法
- [MySQL优化案例]系列 -- DISABLE/ENABLE KEYS的作用
- [MySQL优化案例]系列 — RAND()优化
- [MySQL优化案例]系列 — 典型性索引引发CPU负载飙升问题
- [MySQL优化案例]系列 -- 试用TCMalloc
- [MySQL优化案例]系列 -- DISABLE/ENABLE KEYS的作用
- [MySQL优化案例]系列 — slave延迟很大优化方法
- mysql 超大数据/表管理技巧&MySQL 性能优化的最佳20多条经验
- [MySQL优化案例]系列 -- 带函数的查询条件
- [MySQL优化案例]系列 -- OPTIMIZE的威力
- [MySQL优化案例]系列 -- DISABLE/ENABLE KEYS的作用
- [MySQL优化案例]系列 -- 频繁创建临时表
- [MySQL优化案例]系列 -- 频繁创建临时表
- MySQL 优化系列 --2.常见SQL技巧
- [MySQL优化案例]系列 — 分页优化
- [MySQL优化案例]系列 — 分页优化
- [MySQL优化案例]系列 -- 无法使用查询缓存