2011-04-20 63 views
4

约有1千万条记录。 分页系统需要查询。如何加快分页所需的MySQL查询 - 表中的百万条记录

查询看起来是这样的:

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

有关于字段4和字段5索引。

所有字段都是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 
+1

'$ value'多久改变一次?你能缓存查询的结果吗?你真的希望用户获得第12万个结果吗? – 2011-04-20 01:19:46

+4

显示表模式并解释查询。 – zerkms 2011-04-20 01:19:50

+0

@Mark艾略特值多次改变有大约2000个不同的值。有很多类似的查询,所以MySQL缓存是有限的,并且希望第一次加载也很快。是的,我希望用户可以分页,因为甚至有链接到最后的分页页面,机器人将扫描所有网站。现在甚至第一页加载5秒。 – Newbie1 2011-04-20 01:27:57

回答

0

我有一个建议,就是数据不应该完全当用户点击它加载到分页,而不是直接再次使用AJAX查询不同的页面。所以在确切的页面上它只显示当前页码数据。希望它有帮助,祝你好运。

+0

Ajax无法使用,因为分页的页面不会被搜索引擎机器人抓取。 – Newbie1 2011-04-20 01:35:32

+0

这完全没有帮助。这将完全导致查询OP发布。 – 2011-04-20 01:35:39

+0

@ Newbie1:我知道我迟到了这篇文章,但我个人非常同意Eric T对此的看法。用ajax加载分页实际上是许多网站的常见做法。搜索引擎机器人仍然可以抓取这些网站,因为您只需要为您的网址提供?page = ...。然而,该网站将加载更快,直到用户滚动到底部,您可以加载分页,所以用户不会注意到任何东西... – Chris 2012-04-26 21:33:10

1

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

+0

你也可以分析用法,看看哪些页面实际加载。也许只有前100个被查看。缓存这些页面,不要打扰其他页面。 (当然,由于性能原因,现在可能不会查看前两三页以外的页面)。 – Marvo 2011-04-20 01:37:25

+0

所有页面必须加载速度较快,因为漫游器将扫描所有网站(它全部可以抓取),并且加载时间现在是重要因素。 – Newbie1 2011-04-20 01:39:45

+0

如果您的数据和分页保持相对静态,我会建议设置memcached。它通过使用重复查询的sties提高了性能。 – afuzzyllama 2011-04-20 01:45:26

0

这张桌子有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;

+0

是的,id是主键,你的查询命题没有加速。 – Newbie1 2011-04-20 01:55:28

0

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

SELECT field1,field2,field3强制索引(表6)从表 WHERE字段6 ='$ hashvalue'AND field4 ='$值' ORDER BY field5 ASC限制$ offset,30;

应该有助于消除数据的99.99%,它具有文本搜索和不管抵消应加快您的查询之前....

+0

请问你能解释一下吗(表(表6)是table4的索引散列)。什么是字段6和'$ hashvalue'? – Newbie1 2011-04-20 02:24:40

相关问题