cari
Rumahpangkalan datatutorial mysql优化mysql的limit offset的例子

在mysql中,通常使用limit做分页,而且经常会跟order by 连用。在order by 上加索引有时候是很有帮助的,不然系统会做很多的filesort

经常碰到的一个问题是limit的offset太高,如:limit 100000,20,这样系统会查询100020条,然后把前面的100000条都扔掉,这是开销很大的操作,导致查询很慢。假设所有分页的页面访问频率一样,这样的查询平均扫描表的一半数据。优化的方法,要么限制访问后面的页数,要么提升高偏移的查询效率。

一个简单的优化办法是使用覆盖查询(covering index)查询,然后再跟全行的做join操作。如:

代码如下:
SQL>select * from user_order_info limit 1000000,5;

这条语句就可以优化为:
代码如下:
select * from user_order_info inner join (select pin from user_order_info limit 1000000,5) as lim using(pin);
SQL>explain select * from user_order_info limit 1000000,5;
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
| 1 | SIMPLE | user_order_info | ALL | NULL | NULL | NULL | NULL | 23131886 | |
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
1 row in set (0.00 sec)
SQL>explain extended select * from user_order_info inner join (select pin from user_order_info limit 1000000,5) as lim using(pin);
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
| 1 | PRIMARY | | ALL | NULL | NULL | NULL | NULL | 5 | 100.00 | |
| 1 | PRIMARY | user_order_info | eq_ref | PRIMARY | PRIMARY | 42 | lim.pin | 1 | 100.00 | |
| 2 | DERIVED | user_order_info | index | NULL | PRIMARY | 42 | NULL | 23131886 | 100.00 | Using index |
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
3 rows in set, 1 warning (0.66 sec)


根据两个explain的对比,可以清晰发现,第一个未使用索引,扫描了23131886行,第二个也扫描了同样的行数,但是使用了索引,效率提高了。这样可以直接使用index得到数据,而不去查询表,当找到需要的数据之后,在与全表join,获得其他的列。

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Laravel中take和limit的使用方法详解Laravel中take和limit的使用方法详解Mar 10, 2024 pm 05:51 PM

《Laravel中take和limit的使用方法详解》在Laravel中,take和limit是两个常用的方法,用于在数据库查询中限制返回的记录数。虽然它们的作用类似,但在具体的使用场景中有一些细微的区别。本文将详细解析这两个方法的用法,并提供具体的代码示例。一、take方法在Laravel中,take方法用于限制返回的记录数,通常结合orderBy方法一起

Laravel中take和limit的功能及用法对比Laravel中take和limit的功能及用法对比Mar 09, 2024 pm 09:09 PM

Laravel中take和limit是两种常用的方法,用于限制查询结果集的数量。虽然它们在功能上有一定的相似之处,但在使用方式和一些细节上有所不同。本文将对这两种方法的功能及用法进行详细对比,同时提供具体的代码示例,帮助读者更好地理解它们之间的区别和如何正确地应用。1.take方法take方法是LaravelEloquent查询构建器中

深入探讨Laravel中take和limit的不同之处深入探讨Laravel中take和limit的不同之处Mar 10, 2024 pm 01:00 PM

在Laravel中,我们经常会用到一些方法来限制查询结果的数量,其中包括take和limit两个方法。虽然它们都可以用来限制查询结果的数量,但它们之间确实有一些细微的区别。在本文中,我们将深入探讨take和limit在Laravel中的不同之处,并通过具体的代码示例来加以说明。首先,让我们来看一下take方法。take方法是Eloquent的一部分,通常用于

如何使用Java中的Stream的limit和skip函数进行流操作如何使用Java中的Stream的limit和skip函数进行流操作Jun 26, 2023 pm 03:55 PM

Java8中引入了StreamAPI,它能够极大地简化对集合的操作。Stream类提供了许多用于操作流的函数式方法,包括过滤、映射、合并等等。其中,limit和skip是用于流操作中限制元素数量的两个函数。一、limit函数limit函数用于限制流中元素的数量,它接受一个long类型的参数n,表示限制的数量。调用limit函数后,返回一个新的流,它仅包含

最终幻想7limit怎么攒最终幻想7limit怎么攒Mar 07, 2024 pm 06:40 PM

玩家在最终幻想7中进行游戏时可以通过积攒limit使用极限技,可以造成巨大伤害或提供强大的支援效果,玩家可以通过受到伤害、攻击敌人、被击中连击等方式获得limit。最终幻想7limit怎么攒1、受到伤害当角色受到敌方攻击或队友受到攻击时,limit条会逐渐增长。受到的伤害越多,limit条填充得越快。2、攻击敌人主动攻击敌人也能增加limit条的填充速度。使用普通攻击、技能或魔法都能积累limit。3、被击中连击角色连续被敌人攻击时,limit条的填充速度会加快。可以通过吸引敌人的关注或者使用持

PHP Notice: Undefined offset解决方法PHP Notice: Undefined offset解决方法Jun 25, 2023 am 09:51 AM

PHPNotice:Undefinedoffset是一种常见的PHP程序错误,它表示程序尝试使用数组中不存在的下标,导致程序无法正常运行。这种错误通常会在PHP解释器显示以下警告信息时发生:Notice:Undefinedoffset。下面是一些解决PHPNotice:Undefinedoffset错误的方法:检查代码首先,应该

不同的MySQL分页实现方式不同的MySQL分页实现方式Feb 19, 2024 pm 03:26 PM

MySQL分页方法有哪些,需要具体代码示例MySQL是一种关系型数据库管理系统,为了提高查询效率和减少数据传输量,分页查询是一个非常常见的需求。MySQL提供了多种分页方法,下面将详细介绍这些方法,并提供具体的代码示例。使用LIMIT子句分页:LIMIT子句用于限制查询结果的返回行数。它有两个参数,第一个参数指定返回结果的起始偏移位置(从0开始计数),第二个

PHP Notice: Undefined offset:的解决方法PHP Notice: Undefined offset:的解决方法Jun 23, 2023 pm 01:26 PM

PHP是一种高性能、开源、跨平台的脚本语言,被广泛应用于Web开发领域。PHP语言的易用性和灵活性为开发者带来了很多便利,但也会遇到一些问题。其中,最常见的错误之一就是“PHPNotice:Undefinedoffset:XXX”。这个错误通常是由PHP程序中访问数组时使用了不存在的键名或下标引起的。当尝试访问数组的一个不存在的元素时,PHP会发出一

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular