MySQL如何优化LIMIT

MySQL如何优化LIMIT

在一些情况中,当你使用LIMIT row_count而不使用HAVING时,MySQL将以不同方式处理查询。

·         如果你用LIMIT只选择一些行,当MySQL选择做完整的表扫描时,它将在一些情况下使用索引。

·         如果你使用LIMIT row_count与ORDER BY,MySQL一旦找到了排序结果的第一个row_count行,将结束排序而不是排序整个表。如果使用索引,将很快。如果必须进行文件排序(filesort),必须选择所有匹配查询没有LIMIT子句的行,并且在确定已经找到第1个row_count行前,必须对它们的大部分进行排序。在任何一种情况下,一旦找到了行,则不需要再排序结果的其它部分,并且MySQL不再进行排序。

·         当结合LIMIT row_count和DISTINCT时,MySQL一旦找到row_count个唯一的行,它将停止。

·         在一些情况下,GROUP BY能通过顺序读取键(或在键上做排序)来解决,然后计算摘要直到关键字的值改变。在这种情况下,LIMIT row_count将不计算任何不必要的GROUP BY值。

·         只要MySQL已经发送了需要的行数到客户,它将放弃查询,除非你正使用SQL_CALC_FOUND_ROWS。

·         LIMIT 0将总是快速返回一个空集合。这对检查查询的有效性是有用的。当使用MySQL API时,它也可以用来得到结果列的列类型。(该技巧在MySQL Monitor中不工作,只显示Empty set;应使用SHOW COLUMNS或DESCRIBE)。

·         当服务器使用临时表来进行查询时,使用LIMIT row_count子句来计算需要多少空间。

时间: 2025-01-25 09:09:35

MySQL如何优化LIMIT的相关文章

【Mysql 学习】LIMIT 的使用

--limit 的使用  select ....[LIMIT offerset_start,row_count]其中offerset_start 表上记录的起 limit  rowstart,rowcount 类似与分页查询,rowstart是从第几行开始,rowcount是包括此后几行, 在一些情况中,当你使用LIMIT row_count而不使用HAVING时,MySQL将以不同方式处理查询. 始偏移量,默认为0,只需记录数据行就可以了.row_count为显示的行数. ---显示第一行.

MySql sql优化之order by desc/asc limit M

Order by desc/asc limit M是我在mysql sql优化中经常遇到的一种场景,其优化原理也非常的简单,就是利用索引的有序性,优化器沿着索引的顺序扫描,在扫描到符合条件的M行数据后,停止扫描:看起来非常的简单,但是我经常看到很多性能较差的sql没有利用这个优化规律,下面将结合一些实际的案例来分析说明: 案例一: 一条sql执行非常的慢,执行时间为: root@test 02:00:44   SELECT * FROM test_order_desc WHERE  END_TI

[MySQL 5.6优化] -- limit x,x 优化

待优化SQL: 我们来分析下这条SQL存在的问题是什么?每条SQL都要进行limit 分页 1000 ,每次SQL扫描的时候都会多扫描出来1000依次类似 每个SQL1+1000+SQl n 1000扫描的行数越来越多,SQL执行越来越慢 那么我们这个时候应该如何进行优化呢? 1.查看表结构: 接下来看一下SQL: SQL2:SQL1:limit 13000,1000 SQL 2:limit 14000,1000 SQL3 15000,1000 .......每次进行limit分页后面就会越来越

一些Mysql的优化经验

mysql|优化  一些 Mysql 的优化经验    1. 从数据库结构做起1. 字段类型的定义时遵循以下规则:1. 选用字段长度最小2. 优先使用定长型3. 尽可能的定义 "NOT NULL" 4. 数值型字段中避免使用 "ZEROFILL" 5. 如果要储存的数据为字符串, 且可能值已知且有限, 优先使用 enum 或 set 2. 索引的优化至关重要(以下如果没有特殊说明, 均指查询密集的情况)     1. 被索引的字段的长度越小, 该索引的效率越高2.

mysql数据库优化

mysql|数据|数据库|优化 下决心开始学oracle了,用mysql已经有不短的时间了,今天写下这些算是对自己的一个mysql之旅的一个交代吧.以下仅仅是本人在使用mysql过程中的一点个人的体会,也许存在许多纰漏和错误,还请指正!! 首先,为了使一个系统更快,最重要的部分就是基础设计,不过有些东西是现有情况下无法逾越的,比如说系统常见的瓶颈. 我所能想到的: 1:磁盘寻道能力,以高速硬盘(7200转/秒),理论上每秒寻道7200次.这是没有办法改变的,优化的方法是----用多个硬盘,或者把

mysql数据库优化(未完....待续....)

mysql|数据|数据库|优化 ########################################文件名:mysqloptimize,php                           ##主题: mysql数据库的优化                  ##作者: _Shakespeare(网络骑士)                    ##最后修改时间: 2002--09--20                      ##e-mail: shakespareshm

MySQL的优化(五)

二十一.MySQL表高速缓存工作原理 每个MyISAM表的打开实例(instance)使用一个索引文件和一个数据文件.如果表被两个线程使用或在 同一条查询中使用两次,MyIASM将共享索引文件而是打开数据文件的另一个实例. 如果所有在高速缓存中的表都在使用,缓存将临时增加到比表缓存尺寸大些.如果是这样,下一个被 释放的表将被关闭. 你可以通过检查mysqld的Opened_tables变量以检查表缓存是否太小.如果该值太高,你应该增大表高 速缓存. 二十二.MySQL扩展/优化-提供更快的速度

mysql数据库优化总结

1. 优化你的MySQL查询缓存在MySQL服务器上进行查询,可以启用高速查询缓存.让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一.当同一个查询被执行多次时,如果结果是从缓存中提取,那是相当快的. 但主要的问题是,它是那么容易被隐藏起来以至于我们大多数程序员会忽略它.在有些处理任务中,我们实际上是可以阻止查询缓存工作的. 1. // query cache does NOT work 2. $r = mysql_query("SELECT username FROM user WHERE

解开发者之痛:中国移动MySQL数据库优化最佳实践

 章颖数据研发工程师 现任中国移动杭州研发中心数据研发工程师,擅长MySQL故障诊断,性能调优,MySQL高可用技术,曾任中国电信综合平台开发运营中心DBA   开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则需要从数据类型优化,索引优化,SQL优化三个角度考虑MySQL数据库优化问题,本次分享将从开发角度,看如何实现MySQL数据库优化. 本次