저는 기존 Oracle 데이터베이스를 사용하고 있습니다 (구성하지 않았고 테이블 구조를 넘어서 아무것도 알지 못합니다). 일부 쿼리는 매우 빠르며 다른 유사한 쿼리는 매우 느립니다. 예를SQL 쿼리 시간을 이해하십시오.
SELECT a.price, c.banner_id, c.short_name
FROM ret_price_current a
JOIN ret_store b ON a.store_id = b.store_id
JOIN ret_banner c ON b.banner_id = c.banner_id
JOIN ret_store2cbsa_csa d ON a.store_id = d.store_id
WHERE rownum<3
(1.09, 74, 'Safeway')
(1.09, 74, 'Safeway')
that took 0.243073940277 seconds
들어 있지만 조건이 WHERE 겉으로는 단순 추가하는 경우 : 지금 많은 분 동안 돌아 가지 않고
SELECT a.price, c.banner_id, c.short_name
FROM ret_price_current a
JOIN ret_store b ON a.store_id = b.store_id
JOIN ret_banner c ON b.banner_id = c.banner_id
JOIN ret_store2cbsa_csa d ON a.store_id = d.store_id
WHERE c.banner_id = 74
AND rownum<3
가 실행되었습니다. 무슨 일 이니? (참고로, ret_price_current는 ~ 300m 엔트리를 가지고 있고 다른 것들은 훨씬 더 작습니다.) 인덱스와 관련이 있다고 상상해보십시오. 누군가가 저에게 데이터베이스 알고리즘에 관한 책을 가르쳐 줄 수 있습니까 (예 : 쿼리가 실제로 백엔드에서 작동하는 방식). 무슨 일이 벌어지고 있는지 이해할 수 있니?
아마도 banner_id에 대한 색인이나 banner_id 및 rownum에 대한 색인이 필요할 것입니다. rownum 필드가있는 테이블은 무엇입니까? –
rownum은 단순히 oracle에게 첫 번째 n 개의 행만 반환하도록 알려줍니다. – andyInCambridge
c.banner_id = 74가 세 번째 조인보다 느린 이유는 없습니다. b.banner_id = 74는 어떻게됩니까? –