Много OR условий в MySQL запросе
Добрый день!
Есть MySQl запрос вида:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .sql.geshi_code {font-family:monospace;} .sql.geshi_code .imp {font-weight: bold; color: red;} .sql.geshi_code .kw1 {color: #993333; font-weight: bold;} .sql.geshi_code .co1 {color: #808080; font-style: italic;} .sql.geshi_code .co2 {color: #808080; font-style: italic;} .sql.geshi_code .coMULTI {color: #808080; font-style: italic;} .sql.geshi_code .es0 {color: #000099; font-weight: bold;} .sql.geshi_code .br0 {color: #66cc66;} .sql.geshi_code .sy0 {color: #66cc66;} .sql.geshi_code .st0 {color: #ff0000;} .sql.geshi_code .nu0 {color: #cc66cc;} .sql.geshi_code span.xtra { display:block; }
SELECT col1, col2 FROM some_table
WHERE col_1 = 'some_value1' OR col_1 = 'some_value2' OR col_1 = 'some_value3' ...
col_1 --- VARCHAR(300), по ней есть индекс KEY `col_1_INDEX` (`col_1`(255)) USING BTREE
Проблема в том, что когда OR условий становится очень много запрос начинает тормозить.
Также, когда OR условий слишком много перестает использоваться col_1_INDEX
и приходиться использовать USE INDEX(col_1_INDEX)
С чем это может быть связано?
Есть MySQl запрос вида:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .sql.geshi_code {font-family:monospace;} .sql.geshi_code .imp {font-weight: bold; color: red;} .sql.geshi_code .kw1 {color: #993333; font-weight: bold;} .sql.geshi_code .co1 {color: #808080; font-style: italic;} .sql.geshi_code .co2 {color: #808080; font-style: italic;} .sql.geshi_code .coMULTI {color: #808080; font-style: italic;} .sql.geshi_code .es0 {color: #000099; font-weight: bold;} .sql.geshi_code .br0 {color: #66cc66;} .sql.geshi_code .sy0 {color: #66cc66;} .sql.geshi_code .st0 {color: #ff0000;} .sql.geshi_code .nu0 {color: #cc66cc;} .sql.geshi_code span.xtra { display:block; }
SELECT col1, col2 FROM some_table
WHERE col_1 = 'some_value1' OR col_1 = 'some_value2' OR col_1 = 'some_value3' ...
col_1 --- VARCHAR(300), по ней есть индекс KEY `col_1_INDEX` (`col_1`(255)) USING BTREE
Проблема в том, что когда OR условий становится очень много запрос начинает тормозить.
Также, когда OR условий слишком много перестает использоваться col_1_INDEX
и приходиться использовать USE INDEX(col_1_INDEX)
С чем это может быть связано?
1 ответов
Множественное условие OR можно сократить до одного IN. При этом индекс будет работать.
SELECT col1, col2 FROM some_table
WHERE col_1 IN ('some_value1', 'some_value2', 'some_value3')