【发布时间】:2019-01-03 22:57:56
【问题描述】:
我已经构建了一个查询编辑器,用户可以在其中输入查询。但是,它需要将用户的输入限制为 1000 个结果,否则用户可能会输入类似的内容:
SELECT * FROM mybigtable
它可以尝试下载 10 亿个结果。
实施限制的最佳方式是什么?我想到的第一种方法是:
SELECT * FROM (
user-query
) x LIMIT 1000
但是,这会在执行实际限制之前执行整个查询(并且可能需要很长时间)。对用户的 sql 输入实施严格限制的最佳方法是什么?
【问题讨论】:
-
我希望查询优化器将其重写为
user-query LIMIT MIN(user-limit, 1000)... -
@Nick 当我在 mysql 中尝试一个大表时它不会:
select * from (select * from main_item) x limit 100 -
你的方法是正确的。您的查询仅选择 1000 行。就这些
-
@Simonare 我从理论上理解这是正确的,但我不希望最终用户在发出查询时等待 20 分钟以返回 1000 个结果,如果它正在下载子选择语句中的整个表。
-
它不下载。 DBMS 系统以这种方式是智能的 :)