2017-12-18 10 views
0

하나의 값에 대해 열 쌍을 검색하려고하는 MySQL 테이블이 있습니다. 그것은 꽤 큰 테이블입니다, 그래서 나는 가능한 한 빨리 검색 시간을 원합니다.여러 열에 단일 값을 사용하여 WHERE의 최적화

내가 이름과

는 이전에 EXPLAIN sirname에 인덱스 이해의 편의를 위해

SELECT * FROM clients WHERE name=? OR sirname=? 

VS

SELECT * FROM clients WHERE ? IN (name, sirname) 

를 아래 표를 단순화 한 인덱스를 사용하지만,하지에 후자는

정확합니까 아니면 약간의 최적화가 있습니까? EXPLAIN이 잡아 내지 못하는 후드에서 계속 진행됩니까?

매우 관련이있는 Checking multiple columns for one value이지만 스레드의 나이로 인해 논의 할 수 없습니다. MySQL은 일반적으로 쿼리에서 테이블 참조 당 하나의 인덱스를 사용하기 때문에

답변

0

, 당신은 아마 이런 식으로해야 할 것 : 이것은 인덱스 선택의 목적을 위해 두 테이블 참조로 계산됩니다

SELECT * FROM clients WHERE name=? 
UNION 
SELECT * FROM clients WHERE sirname=? 

. 각각의 경우에 적절한 색인이 사용됩니다.

+0

첫 번째 쿼리는 인덱스를 사용하지만, MySQL은 여러 인덱스를 잘 처리합니다. – KilleR

+1

@KilleR -'EXPLAIN'을 확인하십시오; "인덱스 병합"은 유용한 인덱스가 부족한 상황을 해결하기위한 _kludge_입니다. Bill의 솔루션은 두 개의 개별 인덱스를 훨씬 효율적으로 사용할 수 있습니다. –