1

我建立了一个网站,其中包含大约 1,000,000 种产品。我想构建一组站点地图,其中将包含所有产品的链接。我知道站点地图可能包含多达 50,000 个链接,因此我的计划是构建 20 个这样的站点地图。

我想用一系列 SQL 语句来完成这个。我的计划:1000 条 SQL 语句,每条可以拉出 1000 个产品。SQL 语句将遵循以下几行:

SELECT name, category, catalog_number FROM product ORDER BY id LIMIT    0, 1000
SELECT name, category, catalog_number FROM product ORDER BY id LIMIT 1000, 1000
SELECT name, category, catalog_number FROM product ORDER BY id LIMIT 2000, 1000
SELECT name, category, catalog_number FROM product ORDER BY id LIMIT 3000, 1000

等等。

问题是随着 LIMIT 的第一个参数(偏移量)的增长,每个 sql 执行的时间增长得非常快!具体来说,当 LIMIT 的第一个参数小于 28000 时,语句在 0.3 秒内执行。但是当我尝试时:

SELECT name, category, catalog_number FROM product ORDER BY id LIMIT 29000, 1000

执行语句所需的时间跃升至 30 秒!之后的每条语句都需要同样长的时间来执行。

我尝试的另一件事是将第二个参数增加到 LIMIT - 但发生了同样的问题。

欢迎任何帮助。谢谢你。

4

1 回答 1

4

使用LIMIT要求 MySQL 获取所有行达到限制,但丢弃那些您不感兴趣的行 - 即只是不将它们返回给客户端。因此,如果有数千行要获取(和丢弃),则会显着降低执行时间。

相反,只需跟踪id您上次看到的内容;然后总是过滤:

SELECT   name, category, catalog_number
FROM     product
WHERE    id >= ?  -- the last one you saw, or 0/omit if none
ORDER BY id
LIMIT    1000

如果列上有索引,这将特别快id

于 2012-05-09T17:48:13.190 回答