【数据库】优化排序 && 高效分页

标签: 数据库 优化 排序 | 发表时间:2014-09-20 06:43 | 作者:aiwuzhiling
出处:http://blog.csdn.net

例子:

select <cols> from profiles where sex = 'M' order by rating  limit 10;

同时使用了order by,limit,如果没有索引会很慢。而sey的选择又很低,可以增加一些特殊的索引来做排序。例如,创建(sex,rating)索引。


即使有索引,如果用户需要翻页,并且翻页到比较靠后时查询也可能非常慢。

下面这个查询就通过order by 和limit偏移量的组合翻页到很靠后面的时候:

mysql>select <cols> from profiles where sex = 'M‘order by rating limit 1000000,10 ; 


无论如何创建索引,这种查询都是个严重的问题。因为随着偏移量增多,MySQL需要花费大量的时间来扫描需要丢弃的数据。


反序列化、预先计算和缓存可能是解决这类问题的仅有策略。一个更好的办法是限制用户的翻页数量,实际对用户体验也不会有太大影响,因为用户很少会正在在乎搜索结果的第10000页数据。


优化这类索引的另一个比较好的策略就是使用延迟关联,通过使用覆盖索引查询返回需要的主键,再根据这些主键关联原表获得需要的行。这可以减少MySQL扫描那些丢弃的行数。下面这个查询显示了如何高效地使用(sex,rating)索引进行排序和分页。

mysql>select  <cols> from profiles inner join (

-> select <primary key cols >from profiles 

->where x.sex = 'M' order by rating limit 100000,10

->as x using (<primary key cols>);

 


参考:《高性能MySQL》


作者:aiwuzhiling 发表于2014-9-19 22:43:19 原文链接
阅读:2 评论:0 查看评论

相关 [数据库 优化 排序] 推荐:

【数据库】优化排序 && 高效分页

- - CSDN博客推荐文章
同时使用了order by,limit,如果没有索引会很慢. 而sey的选择又很低,可以增加一些特殊的索引来做排序. 例如,创建(sex,rating)索引. 即使有索引,如果用户需要翻页,并且翻页到比较靠后时查询也可能非常慢. 下面这个查询就通过order by 和limit偏移量的组合翻页到很靠后面的时候:.

数据库优化

- - 数据库 - ITeye博客
程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点: . a) SQL的使用规范: .   i.尽量避免大事务操作,慎用holdlock子句,提高系统并发能力.   ii.尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接.   iii.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作.

数据库优化小计

- - CSDN博客数据库推荐文章
周一夜间进行了一次XX业务相关的数据库表优化. 一共4张表,数据量不大,最小的40万记录,最大的300万,大小不超过300MB. 但由于历史原因,表没有建立索引,对应的服务使用的SQL千姿百态,修改起来难度有点大,容易改错,涉及的全国客户较多,大部分都是全表扫描,在秒级的响应时间,但大多客户还能忍着.

数据库的优化tips

- - CSDN博客数据库推荐文章
数据库   TIPS::. 1、用于记录或者是数据分析的表创建时::使用Id作为主键,1,2,3...表示消息条数,用户账号id用于做外键,一个用户对应唯一个accountId.                                     一个accountId可以对应多条数据;. 2、创建索引::    例如需要根据注册版本号和注册游戏ID来查询另外一些字段的时候,就可以根据版本号和游戏ID来创建索引::相当于就是根据查询条件来建索引;.

数据库查询优化

- - SQL - 编程语言 - ITeye博客
1 使用SET NOCOUNT ON 选项:.     缺省地,每次执行SQL语句时,一个消息会从服务端发给客户端以显示SQL语句影响的行数. 通过关闭这个缺省值,你能减少在服务端和客户端的网络流量,帮助全面提升服务器和应用程序的性能. 为了关闭存储过程级的这个特点,在每个存储过程的开头包含“SET NOCOUNT ON”语句.

MySQL数据库优化总结

- - CSDN博客推荐文章
        对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要. 一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小.        一、数据库设计   适度的反范式,注意是适度的.

ORACLE数据库优化设计方案

- - CSDN博客推荐文章
本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案. 关键词 ORACLE数据库 环境调整 优化设计 方案. 对于ORACLE数据库的数据存取,主要有四个不同的调整级别,第一级调整是操作系统级包括硬件平台, 第二级调整是ORACLE RDBMS级的调整,.

DB2数据库性能优化介绍

- - CSDN博客数据库推荐文章
作者:chszs,转载需注明. 博客主页: http://blog.csdn.net/chszs. 前段时间,我从CSDN得到了这本书《DB2数据库性能调整和优化(第2版)》,这是一本介绍DB2数据库性能调优的书籍,此书覆盖了DB2数据库性能调优所需的全部知识和工具,而且还提供了大量的性能调优的实际案例,颇有一种“一书在手,DB2尽在掌握”的豪情.

浅谈MySQL 数据库性能优化

- - BlogJava-qileilove
数据库是 IO 密集型的程序,和其他数据库一样,主要功能就是数据的持久化以及数据的管理. 本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,. 日志缓存,索引缓存,innodb缓存,插入缓存,以及连接参数等方式来对MySQL数据库进行优化.   这里先引用一句话,从内存中读取一个数据的时间消耗是微秒级别,而从普通硬盘上读取一个数据是在毫秒级别,二者相差3个数量级.

数据库优化的最佳实践

- - ITeye博客
  选择合理的索引(前缀性及可选性)、删除没有用的索引.    2)使用规范化,但不要使用过头.   规范化(至少是第三范式)是一个易于理解且标准的方法. 然而,在有些情况下,你可能希望违反这些规则. 查询表通常是规范化的产物,也就是说,你创建了一个特殊的表,这个表包含了在其他表中被频繁使用的相关信息的列表.