[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MySQL doesn't yet optimize when you search on two different
keys combined with OR
(searching on one key with different OR
parts is optimized quite well):
SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1' OR field2_index = '1' |
The reason is that we haven't yet had time to come up with an efficient
way to handle this in the general case. (The AND
handling is,
in comparison, now completely general and works very well.)
In MySQL 4.0 and up, you can solve this problem efficiently by using a
UNION
that combines the output of two separate SELECT
statements.
See section 13.1.7.2 UNION
Syntax.
Each SELECT
searches only one key and can be optimized:
SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1' UNION SELECT field1_index, field2_index FROM test_table WHERE field2_index = '1'; |
Prior to MySQL 4.0, you can achieve the same effect by using a
TEMPORARY
table and separate SELECT
statements.
This type of optimization is also very good if
you are using very complicated queries where the SQL server does the
optimizations in the wrong order.
CREATE TEMPORARY TABLE tmp SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1'; INSERT INTO tmp SELECT field1_index, field2_index FROM test_table WHERE field2_index = '1'; SELECT * from tmp; DROP TABLE tmp; |
The above way to solve this query is in effect a UNION
of two queries.