【发布时间】:2013-12-31 09:25:11
【问题描述】:
为什么下面的查询在 mysql 中花费了这么多时间,而在 oracle 中却没有
select * from (select * from employee) as a limit 1000
我在 oracle 和 MySQL 数据库中测试此查询,此表中有 50,00,000 条记录。
我知道这些查询应该写成这样
select * from employee limit 1000
但是为了向我们的自定义动态网格显示数据和总行数,我们只有一个查询,我们使用简单的select * from employee 查询,然后添加限制或其他条件。
我们把这个问题做短了。
但我的问题是“为什么在 mysql 中进行这样的查询需要太多时间?”
【问题讨论】:
-
因为你使用的 MySQL 版本并没有通过重写/删除派生表来优化查询。也可以用 mysql 5.6 或 MariaDB 5.5 试试。
-
第一个查询在 Oracle 中几乎需要 0 秒,因为它不会在那里运行 - 语法对 Oracle 无效。
-
是的,你是对的@a_horse_with_no_name 我忘了给别名
-
Oracle 不支持
limit子句(除非您使用的是 Oracle 12c) -
@DarshanPatel 您的 Oracle 数据库版本是多少?