Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Опимизация запроса вида WHERE key_part1 = value1 OR key_part1 = value2 ORDER BY key_part2
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть запрос вида: SELECT id FROM t1 WHERE ((key_part1 = [value11] AND key_part2 = [value12]) OR (key_part1 = [value21] AND key_part2 = [value22])) AND flag = 1 ORDER BY key_part3 DESC LIMIT N, M; Если убрать OR, то индекс (key_part1, key_part2, key_part3) будет работать. Но этот OR нужен, надо как оптимизировать исходный запрос. Просто индексами, мне кажется, тут отделаться не получится, поэтому нужны другие идеи. Табличка t1 состоит из более чем 500кк записей. Возможных сочетаний key_part1+key_part2 десятки миллионов. Есть случаи, когда запрос без LIMIT возвращает сотни тысяч записей, и мускулю приходится их все сортировать. Заранее спасибо за ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2017, 21:00 |
|
||
|
Опимизация запроса вида WHERE key_part1 = value1 OR key_part1 = value2 ORDER BY key_part2
|
|||
|---|---|---|---|
|
#18+
nik_wwwнужны другие идеи. Переписать OR во WHERE на UNION двух запросов. nik_wwwЕсли убрать OR, то индекс (key_part1, key_part2, key_part3) будет работать. (key_part1, key_part2, flag) будет ещё лучше "работать"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2017, 11:50 |
|
||
|
Опимизация запроса вида WHERE key_part1 = value1 OR key_part1 = value2 ORDER BY key_part2
|
|||
|---|---|---|---|
|
#18+
Akina, переписывать на union нету смысла. т.к. сортировка временной таблицы будет все равно без индекса - по сути получаем то же самое flag = 0 встречается крайне редко, в основном flag = 1, поэтому нету смысла его включать в индекс, только лишний вес даст индексам //у этой таблички и так 25гб индексов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 14:50 |
|
||
|
Опимизация запроса вида WHERE key_part1 = value1 OR key_part1 = value2 ORDER BY key_part2
|
|||
|---|---|---|---|
|
#18+
НУ перепишите в такой вид: Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 14:55 |
|
||
|
Опимизация запроса вида WHERE key_part1 = value1 OR key_part1 = value2 ORDER BY key_part2
|
|||
|---|---|---|---|
|
#18+
полагаю, что вы предлагаете, то же самое, просто другой синтаксис explain все равно показывает using filesort тут без смены архитектуры таблиц не обойтись я о таком синтаксисе не знал, очень удобный, за это спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2017, 10:31 |
|
||
|
Опимизация запроса вида WHERE key_part1 = value1 OR key_part1 = value2 ORDER BY key_part2
|
|||
|---|---|---|---|
|
#18+
nik_wwwexplain все равно показывает using filesort При наличии индекса (key_part1, key_part2)? весьма странно... попробуй зафорсить. Или пересчитать статистику... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2017, 11:04 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=47&tid=1830187]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 153ms |

| 0 / 0 |
