1

非常に遅いビューからSQLクエリを取得していますが、おそらくビューの障害であることがわかります。ただし、ビューを変更することはできません。私はこのクエリを持っており、それをより速くするためにそれを最適化する方法について誰かが提案を持っているかどうかを確認したいと思います。

SELECT COUNT(id) AS recordnum, firstname, lastname 
    FROM view 
    WHERE personid=123 AND transactiondate BETWEEN '9/1/2012' AND '9/30/2012' 
    GROUP BY firstname, lastname
4

1 に答える 1

4
SELECT COUNT(id) AS recordnum, firstname, lastname 
FROM view 
WHERE personid=123 AND transactiondate BETWEEN '9/1/2012' AND '9/30/2012' 
GROUP BY firstname, lastname

(personid)および/または(transactiondate)および/または(firstname、lastname)のどちらか最も選択的なもののインデックスを検討してください。つまり、personidが100,000レコードから1つを選択する場合、通常はpersonidのインデックスで十分です。personid + transactiondateの組み合わせでその選択性が得られる場合は、2つの列に複合インデックスを作成します。

これが最も実行された単一のクエリである場合、または十分な頻度で実行する場合は、すべての列をインデックスに含めることもできます。

create index ix_basetable_1 on basetable_inside_view(personid,transactiondate)
INCLUDE(firstname,lastname,id)
于 2012-10-12T17:24:32.593 に答える