2011-01-02 9 views
0

나는 mysql을 사용하고 있으며 두 가지 방법으로 쿼리 할 수 ​​있습니다 (또는 /) 즉, 다음과 같이 쿼리를 쓸 수 있습니다. select * from x where() or() or(). . ..; 또는 다음과 같이 쓸 수 있습니다 : select * from x where() and() and(). . ..;OR 대 AND MySQL

어느 것이 좋습니까? 성능 문제가 있습니까?

답변

2

성능에 대해 잊어 버리고 "바람직한"것이 무엇이냐고 묻는다면 쿼리에서 원하는 것을 따라 or, and을 사용해야합니다. 이 진리표를 사용하는 기본 boolean logic입니다. select * from x where() or() or()select * from x where() and() and()과 매우 다릅니다.

+0

반드시 그런 것은 아닙니다. 우리가 논리에서 알 수 있듯이, 문제가 특정한 방법으로 발생하면 둘 다 같을 수 있습니다. 그러나 그러한 문제를 발견하는 것은 너무 어렵습니다. 어쨌든, 나는 대답했다. –

+0

@Mazhar : 사실, 'ANDs'와 'ORs'를 사용하면 같은 결과가 나오는 경우가 있지만 실제로는 이론적으로 그러한 사례를 찾을 가능성이 더 큽니다. – darioo

+0

나는 그렇게 생각한다. 그러나 실용적으로 그런 문제가 있습니다. 내가 성능에 대해 알아야 할 것이 있다면 왜 그렇게 생각했는지. –

2

두 가지 쿼리가 다르게 작동하므로 어떻게 성능이 향상 될 수 있습니까?

where() or() or(); 조건 중 하나라도 충족되면 결과가 반환됩니다.

where() and() and(); 모든 조건이 충족되는 경우에만 결과가 리턴됩니다.

0

견본 술어가 의미 상 동일하지 않으므로 지나치게 단순화했는지 또는 부정을 언급했는지 잊어 버렸을 까? 예 : 더 이런 식으로 뭔가 :

WHERE (NOT col1 = 'T') OR (NOT col2 = 'T') OR (NOT col3 = 'T'); 

는 그렇다면, 내가 무엇을 @darioo 댓글 말했다 것은 엔진이 그것으로 올바른 부울 논리를 해석하는 것, 즉 답이 있다고 생각

WHERE NOT (col1 = 'T' AND col2 = 'T' AND col3 = 'T'); 

과 동일 적합을보고 아마 걱정할만한 가치가 없습니다. 당신의 임무는 당신이 성능 테스트를하게 될 후보 구성이 실제로 의미 상 동일하다는 것을 확실히하는 것입니다 :