我有一个大约 500 万行的表,如下所示:
erp_in:
corr_id varchar(50) (almost Unique)
corr_type nvarchar(1) (4 distinct values)
interface varchar(20) (around 10 distinct values)
indate DateTime
在(corr_id、interface 和 indate)上有 3 个不同的索引
而且我还有另一个表,我通常将它与原始表连接,大约有 100000 行
Erp_In_failed:
corr_id
interface
error (clob)
input (clob)
带有索引(corr_id 和接口)
我要优化的查询很简单:
SELECT a.corr_id, a.interface, a.indate, b.error
FROM erp_in a left join erp_in_failed b on a.corr_id = b.corr_id and a.interface = b.interface
Order by a.indate desc;
如果我删除订单,查询不会花费那么长时间,但订购数据大约需要 3 分钟,如果不是更多的话。
我可以做些什么来优化查询?我正在考虑分区/将旧数据删除到历史表/可能创建一个序列主键并按它或您想到的任何其他东西排序......
编辑:
执行计划说全表扫描,并不是连接需要这么长时间,而是顺序。
即使这个查询也需要永远:
SELECT * FROM erp_in
ORDER BY indate;
我尝试过使用 Paging,但这也不起作用,并且需要几分钟才能获得 20 个结果,也许我做错了?
如果我在 indate 字段上添加 WHERE 子句,它会使用索引,但仅当它小于 20 天时,除此之外的任何内容仍使用全表扫描。(即使有 40 天,添加 INDEX 提示使查询运行得更快,但仍然不够)。
只是为了好奇,我有一个包含 100 万行的简单表,order by 需要几秒钟,有什么区别?100 万是否足以在 RAM 中对其进行排序?
谢谢,