请参阅下面的SQL:
select count(*) from dbcomplete2_all
inner join dbusns on dbcomplete2_all.urns = dbusns.urns and dbcomplete2_all.datasetname = dbusns.datasetname
where dbusns.cro<>dbcomplete2_all.cro
dbcomplete2_all和dbusns每个包含5500万条记录。我试图找出索引这两个表的最佳方法。我相信这是最好的方式:
CREATE INDEX URNsDatasetNameCRO
ON dbcomplete2_all (URNs,DatasetName,CRO)
CREATE INDEX URNsDatasetNameCRO
ON dbUSNS(URNs,DatasetName,CRO)
查询在一分钟内运行。但是,我也试过这个:
CREATE INDEX URNsDatasetNameCRO
ON dbcomplete2_all (URNs,DatasetName)
CREATE INDEX URNsDatasetNameCRO
ON dbUSNS(URNs,DatasetName)
查询用于在两分钟内使用第二组索引运行。现在它大致相同。哪种方式更好&#34;?
答案 0 :(得分:0)
您的第二组索引将导致密钥查找,因为未包含CRO
。 第一个更好,因为它包含查询中包含的所有列。但是,索引不是免费的午餐。每次插入/更新到表中都会导致对索引的插入/更新。将插入/更新效果与SELECT
效果进行平衡。