[英]How to optimize this query for Oracle
我正在通過使用一些結構(例如索引,索引集群,哈希集群)來學習查詢優化。 我有一張桌子客戶和預訂。 我需要優化2個查詢
查詢1:
SELECT BOOKING.BID, CUSTOMER.CID, BOOKING.SEAT_PRICE
FROM BOOKING, CUSTOMER
WHERE BOOKING.CID= CUSTOMER.CID
AND BOOKING.SEAT_PRICE>200;
查詢2:
SELECT BOOKING.BID, CUSTOMER.CID
FROM BOOKING, CUSTOMER
WHERE BOOKING.CID= CUSTOMER.CID
AND CUSTOMER.CID>1900;
從理論上講,為了提高性能,我們需要對WHERE,JOIN,ORDER BY ...子句中的所有謂詞進行索引/索引簇/哈希簇。 但是,當我嘗試對上述查詢遵循該規則時,它沒有任何性能改進。
例如,對於第一個查詢,我在BOOKING表和CUSTOMER表的CID列上都創建了索引。 我還在BOOKING表的SEAT_PRICE列上創建索引。 我運行的腳本如下:
CREATE INDEX BOOKING_SEAT_PRICE ON BOOKING(SEAT_PRICE);
CREATE INDEX BOOKING_CID ON BOOKING(CID);
CREATE INDEX CUSTOMER_CID ON CUSTOMER(CID);
請注意,我創建跟蹤文件以查看查詢的統計信息。 在創建這些索引之前,我運行查詢以創建跟蹤文件。 創建完這些索引后,我再次運行它以創建另一個跟蹤文件。 但是,新的跟蹤文件在時間,CPU,經過時間,查詢等方面均沒有任何改善。 它甚至具有最差的性能。
有人可以幫我嗎? 由於我不明白為什么,我確實很沮喪,我嚴格遵守規則。 我做了谷歌,但無濟於事。
您可以使用復合索引:
SELECT BOOKING.BID, CUSTOMER.CID, BOOKING.SEAT_PRICE
FROM BOOKING
JOIN CUSTOMER -- explicit JOIN
ON BOOKING.CID = CUSTOMER.CID
WHERE BOOKING.SEAT_PRICE>200;
和
CREATE INDEX BOOKING_SEAT_PRICE_CID ON BOOKING(SEAT_PRICE, CID);
CREATE INDEX CUSTOMER_CID ON CUSTOMER(CID);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.