【数据库】优化排序&&高效分页
例子: select cols from profiles where sex = M order by rating limit 10; 同时使用了order by,limit,如果没有索引会很慢。而sey的选择又很低,可以增加一些特殊的索引来做排序。例如,创建(sex,rating)索引。 即使有索引,如果用户需要翻页,并且翻
例子:
select
同时使用了order by,limit,如果没有索引会很慢。而sey的选择又很低,可以增加一些特殊的索引来做排序。例如,创建(sex,rating)索引。
即使有索引,如果用户需要翻页,并且翻页到比较靠后时查询也可能非常慢。
下面这个查询就通过order by 和limit偏移量的组合翻页到很靠后面的时候:
mysql>select
无论如何创建索引,这种查询都是个严重的问题。因为随着偏移量增多,MySQL需要花费大量的时间来扫描需要丢弃的数据。
反序列化、预先计算和缓存可能是解决这类问题的仅有策略。一个更好的办法是限制用户的翻页数量,实际对用户体验也不会有太大影响,因为用户很少会正在在乎搜索结果的第10000页数据。
优化这类索引的另一个比较好的策略就是使用延迟关联,通过使用覆盖索引查询返回需要的主键,再根据这些主键关联原表获得需要的行。这可以减少MySQL扫描那些丢弃的行数。下面这个查询显示了如何高效地使用(sex,rating)索引进行排序和分页。
mysql>select
-> select
->where x.sex = 'M' order by rating limit 100000,10
->as x using (
参考:《高性能MySQL》
推荐阅读
-
【数据库】优化排序&&高效分页
-
淘宝内部分享:MySQL & MariaDB性能优化
-
数据库优化<二>SQL优化之SELECT优化 ――_MySQL
-
[原创]QTP自定义数据库检查点SQL s…
-
C#List<T>排序多权重、自定义
-
<转>mysql对于大表(千万级),要如何优化呢
-
c#程序中使用"like“查询access数据库查询为空的问题
-
关于mysql数据库“Incorrectstringvalue:'/xFF/xFE/_MySQL
-
mysql对GIS的支持 & oracle 空间数据库说明
-
[慢查优化]联表查询注意谁是驱动表 & 你搞不清楚谁join_MySQL