`
- 浏览:
274677 次
- 来自:
云南大理
-
我们在做一些查询的时候总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的。那么在 MySQL 中有那些方式是可以避免全表扫面的呢?除了我们大家很熟悉的通过使用索引列或分区等方式来进行查询的优化之外还有那些呢?
前些天看了一个老外写的程序,在 MySQL 查询中使用了很多 Limit 关键字,这就让我很感兴趣了,因为在我印象中, Limit 关键字似乎更多被使用 MySQL 数据库的程序员用来做查询分页(当然这也是一种很好的查询优化),那在这里举个例子,假设我们需要一个分页的查询 ,Oracle中一般来说都是用以下 SQL 句子实现:
SELECT * FROM
( SELECT a1.*, rownum rownum_
FROM testtable a1
WHERE rownum > 20)
WHERE rownum_ <= 1000
这个语句就能查询到 testtable 表中的 20 到 1000 记录,而且还需要嵌套查询,效率不会太高,看看 MySQL 的实现:
SELECT * FROM testtable a1 limit 20,980;
这样就能返回 testtable 表中的 21 条到( 20 + 980 =) 1000 条的记录。
实现语法确实简单,但如果要说这里两个 SQL 语句的效率,那就很难做比较了,因为在 MySQL 中 Limit 选项有多种不同的解释方式,不同方式下的速度差异是很大的,因此我们不能从这语句的简洁程度就说谁的效率高。
不过对程序员来说,够简单就好,因为维护成本低,呵呵。
下面讲讲这个 Limit 的语法吧:
SELECT ……. --Select 语句的其他参数
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
这里 offset 是偏移量(这个偏移量的起始地址是 0 ,而不是 1 ,这点很容易搞错的)顾名思义就是离开起始点的位置,而 row-count 也是很简单的,就是返回的记录的数量限制。
Eg. SELECT * FROM testtable a limit 10,20 where ….
这样就能使结果返回 10 行以后(包括 10 行自身)的符合 where 条件的 20 条记录。
那么如果没有约束条件就返回 10 到 29 行的记录。
那这跟避免全表扫描有什么关系呢? 下面是 MySQL 手册对 Limit 参数优化扫描的一些说明:
在一些情况中,当你使用 LIMIT 选项而不是使用 HAVING 时, MySQL 将以不同方式处理查询。
l 如果你用 LIMIT 只选择其中一部分行,当 MySQL 一般会做完整的表扫描时,但在某些情况下会使用索引(跟 ipart 有关)。
l 如果你将 LIMIT n 与 ORDER BY 同时使用,在 MySQL 找到了第一个符合条件的记录后,将结束排序而不是排序整个表。
l 当 LIMIT n 和 DISTINCT 同时使用时, MySQL 在找到一个记录后将停止查询。
l 某些情况下, GROUP BY 能通过顺序读取键 ( 或在键上做排序 ) 来解决,并然后计算摘要直到键值改变。在这种情况下, LIMIT n 将不计算任何不必要的 GROUP 。
l 当 MySQL 完成发送第 n 行到客户端,它将放弃余下的查询。
l 而 LIMIT 0 选项总是快速返回一个空记录。这对检查查询并且得到结果列的列类型是有用的。
l 临时表的大小使用 LIMIT # 计算需要多少空间来解决查询。
百万数据模糊查找大改进!!!!!! (0.03 sec)
SELECT id,name FROM user WHERE name like '%83%' or key like '%83%' limit 0,25;
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
我们在做一些查询的时候总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的。...除了我们大家很熟悉的通过使用索引列或分区等方式来进行查询的优化之外还有那些呢?
到此这篇关于mysql分页的limit参数的文章就介绍到这了,更多相关mysql分页limit参数内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网! 您可能感兴趣的文章:详解MySQL的limit...
本文将详细介绍如何在MySQL中使用`LIMIT`结合参数化查询来实现灵活且安全的数据检索。 #### 一、基础知识简介 1. **LIMIT子句**:`LIMIT`是SQL语言中的一个关键词,用于限制查询结果的数量。其基本语法为: ```...
通过上述的优化措施,可以显著提升使用LIMIT子句进行大数据分页查询时的性能。需要注意的是,在不同的情况下,这些策略的效果可能会有所不同。例如,在offset较小时,直接使用limit可能更加高效,而在offset很大时,...
资源调优包括调整MySQL配置参数,如缓冲池大小、连接数限制、查询缓存等。PPT会介绍如何监控MySQL运行状态,识别瓶颈,并根据负载进行相应调整。 最后,SQL最佳实践是避免性能问题的关键。这可能包括遵循规范的SQL...
在处理MySQL海量数据查询优化时,我们需要关注的策略包括但不限于以下几点: 1. 优化索引使用:避免全表扫描至关重要。为此,应当在查询条件(WHERE)和排序(ORDER BY)涉及的列上创建索引。索引有助于数据库管理...
通过对my.cnf/my.ini配置文件的各项关键参数进行中文注释与解析,帮助DBA及运维人员更好地理解每个配置项的作用及其对MySQL性能的影响。 #### 关键配置项详解 ##### 1. **[client]** - **port=3306**:设定MySQL...
SQL优化主要涉及查询效率、索引使用、查询语句结构优化等多个方面。 首先,理解SQL执行原理是优化的基础。MySQL采用解析、优化、执行三个步骤来处理SQL语句。解析阶段会检查语法和权限;优化阶段会选择最佳的执行...
`LIMIT`通常与`OFFSET`一起使用,以实现分页效果,使得用户能够逐步浏览大量数据,而无需一次性加载所有记录,这样既提高了查询效率,又优化了用户体验。 ### `LIMIT`子句 `LIMIT`子句的基本语法是: ```sql ...
- **查询优化**: 优化SQL语句,避免全表扫描和子查询,使用JOIN代替子查询,合理使用LIMIT和ORDER BY。 - **存储引擎选择**: 根据数据访问模式选择合适的存储引擎,如InnoDB支持事务处理,MyISAM适合读取密集型...
通过以上讲解,我们了解了`LIMIT`在MySQL中的作用、使用方法以及与`ORDER BY`的配合,以及如何通过优化来提高查询效率。在实际开发中,熟练掌握`LIMIT`的运用能帮助我们更好地处理大数据查询,提升数据库的性能。
总结,理解并熟练掌握`LIMIT`子句的不同用法是优化MySQL查询和实现高效分页的关键。通过结合适当的`OFFSET`和`LIMIT`,我们可以有效控制返回的结果集,提高查询性能,并为用户提供流畅的浏览体验。
- 使用LIMIT关键字来限制查询结果的行数。 **4. 使用JOIN替代子查询** - 当可能时,使用JOIN代替子查询以提高查询性能。 **5. 分析和优化复杂查询** - 对复杂的查询进行分解,尝试将其拆分成多个简单查询。 - 使用...
External Locking 是 MySQL 服务器的一个参数,它指定了是否使用外部锁定。默认情况下,External Locking 是开启的,可以使用 –skip-external-locking 选项以避免外部锁定。 7. 最大允许包大小(Max Allowed ...
### MySQL查询优化详解 #### 一、使用EXPLAIN分析查询 **EXPLAIN** 是MySQL中一个非常有用的工具,用于分析SQL语句的执行计划。它能够揭示MySQL如何处理查询,帮助我们理解查询的效率和潜在的性能瓶颈。下面是一些...
"MySQL优化大揭秘"这个压缩包中的"SQL.pdf"很可能包含了关于如何优化MySQL数据库的详细教程。下面,我们将深入探讨MySQL优化的一些关键知识点。 1. **查询优化**: - **索引优化**:创建合适的索引可以显著提升...
- **使用`EXPLAIN`分析查询计划**:理解MySQL如何执行查询,并根据结果调整优化策略。 2. **表结构优化**: - **合理设计数据类型**:选择最适合数据特性的类型,如使用`VARCHAR`代替`CHAR`。 - **适当使用索引*...