繁体   English   中英

如何加快分页所需的MySQL查询——表中百万条记录

[英]How to speed up the MySQL query needed for pagination - million records in the table

大约有 100 万条记录。 分页系统需要查询。

查询如下所示:

SELECT field1, field2, field3 FROM table 
WHERE field4 = '$value' 
ORDER BY field5 ASC limit $offset, 30;

field4 和 field5 上有索引。

所有字段都是 varchar 类型。 Field5 被测试为 int 但没有真正的改进通知。

现在查询limit 0, 30大约需要 1 秒,但查询limit 119970, 30需要大约 20 秒。

在分页页面上获得小于 0.1 秒的结果是否现实? 网站需要这样的加载时间才能提供良好的用户体验。

解释(选择limit 0,30

id: 1
select_type: SIMPLE
table: table
type: index
possible_keys: NULL
key: field5
key_len: 768
ref: NULL
rows: 223636
Extra: Using where

根据您的数据变化的程度,您可以使用memcached来减少特定查询需要运行的次数并减少大多数用户的响应时间。

我有一个建议,当用户单击数据时,不应将数据直接完全加载到分页中,而应再次对不同页面使用 ajax 查询。 所以在精确页面中它只显示当前页码数据。 希望它有所帮助,祝你好运。

这个表有PK吗? Select field1,field2,field3 from table as a join (select PK from table WHERE field4 = '$value' ORDER BY field5 ASC limit $offset, 30) as b on a.PK=b.PK;

您是否考虑过制作另一个表(表 6),它是 table4 的索引散列? 搜索数字而不是文本会快很多,因此查询类似于:

SELECT field1, field2, field3 Force Index(Table6) FROM table WHERE field 6 = '$hashvalue' AND field4 = '$value' ORDER BY field5 ASC limit $offset, 30;

它应该有助于在必须进行文本搜索之前消除 99.99% 的数据,并且无论偏移量如何,都应该加快您的查询速度......

它应该有索引“B-TREE (field4, field5)”。 这个索引将允许 MySQL 使用 field4 来查找记录并限制它们在 field5 上的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM