sql - 有没有更好的方法来优化这个 SQL 查询?
问题描述
假设我的表有数百万条记录。
以下列具有索引:
- 类型
- 日期
- 唯一身份
这是我的查询:
SELECT TOP (1000) T.TIME, T.TYPE, F.NAME,
B.NAME, T.MESSAGE
FROM MY_TABLE T
LEFT OUTER JOIN FOO F ON F.ID = T.FID
LEFT OUTER JOIN BAR B ON B.ID = T.BID
WHERE T.TYPE IN ('success', 'failure')
AND T.DATE BETWEEN 1592585183437 AND 1594232320525
AND T.UNIQUE_ID = "my unique ID"
ORDER BY T.DATE DESC
我的问题是,如果我的表中有大量记录,我是否会给自己带来任何麻烦?这可以进一步优化吗?
解决方案
我的问题是,如果我的表中有大量记录,我是否会给自己带来任何麻烦?
错误的问题。只要你只要求你需要的数据,你就需要它。任何麻烦都意味着你仍然需要它。
查询看起来和它一样好。我以某种方式怀疑 TOP 10000(这是很多数据,除非您以某种方式对其进行压缩)。
问题更多的是您是否有适当的索引。没有适当的索引。我也不会对 TYPE 使用这样的字符串,但问题是关于查询,而不是表设计中的可能失败。
检查索引。
推荐阅读
- python - 为什么这个程序会抛出错误?
- ajax - 带有 BI4.2 SP6 的 Jmeter - Ajax 请求 - 403 错误
- c# - 如何处理/关闭“TiffBitmapDecoder”流
- flutter - 如何将包添加到颤振项目中?
- java - Java-调试 if-else 语句
- python - 如何将单列中的数据拆分为多列,并在 python 中删除与之关联的特殊字符?
- batch-file - 从 bat 文件中删除行文本文件中的剩余空格
- c# - 列表框中按钮的命令
- java - TimePicker 微调器模式更改冒号的颜色
- ssl - LDAP 的 Haproxy ssl 终止