以下是查询:
SELECT DISTINCT patientid.acct
FROM patientid,
doc_table
WHERE patientid.acct = doc_table.acct
AND patientType IN ( 'I', '1', 'T' )
AND fid IN ( '023' )
AND ( dischargedate IS NULL
OR dischargedate = ''
OR dischargedate < '19000101' )
AND dbcreate_date > DATEADD(hh, -24, GETDATE());
我们将添加patientType,fid dischargeate和dbcreate_date的标记。但我想知道查询本身是否可以用不同的方式编写以使其更有效。
谢谢,
答案 0 :(得分:1)
如果没有更多信息,很难成为规定性的,但总的来说:
1 - 您确定需要DISTINCT
吗?对于较大的数据集,这可能是一项昂贵的操作。在没有它的情况下运行查询以查看结果是否不同。如果他们这样做,您可能想要更改结构以消除重复。
2 - 首先在您的WHERE
子句中放入最严格的条件,然后按限制的降序排列。例如,如果您的patienttype
过滤器将结果降至50%,但fid
过滤器会将其降至20%,请先使用fid
过滤器。
3 - 对于索引,请确保您的JOIN
密钥已编入索引:patientid.acct
和doc_table.acct
这可能会对性能产生最大影响。
另一方面,使用显式JOIN
语法,它更容易阅读和维护,尤其是在较长的查询上。修订版将是:
SELECT DISTINCT patientid.acct
FROM patientid
INNER JOIN doc_table
ON patientid.acct = doc_table.acct
WHERE patientType IN ( 'I', '1', 'T' )
...
答案 1 :(得分:0)
使用WHERE EXISTS
代替JOIN
并使用DISTINCT
答案 2 :(得分:0)
您应该考虑的一件事:修复列dischargedate
的值并选择一个值null or '' or < '19000101'
,以便您可以摆脱or
:a)它需要花费时间和b)数据库不应该是一团糟。