|
|
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Всем привет. Существует запрос типа SELECT (SELECT count(`id`) FROM `table1` WHERE `col1`= 1 and `col2` = 'some text') as 'one', (SELECT count(`id`) FROM `table1` WHERE `col1`= 2 and `col2` = 'some text') as 'two', (SELECT count(`id`) FROM `table1` WHERE `col1`= 3 and `col2` = 'some text') as 'three' ....; Запрос довольно большой, хотелось бы знать, есть возможность ли его оптимизировать? Заставить работать быстрее? Поиск как правило идет по ключевым полям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 11:09 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
crazybite, Показывайте полностью запрос, его план и DDL всех участвующих таблиц с индексами. Для начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 11:14 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 11:15 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Akina, Я некорректно написал, some text имеется ввиду разный в каждом сравнении.. Исправлю первый пост. miksoft, col1 и col2 ключи. varchar 200 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 11:30 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Текст "col1 и col2 ключи. varchar 200 " забыл удалить ) З.Ы. не нашел как редактировать сообщение :\ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 11:32 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Какая нафиг разница? Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 11:32 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
crazybite, Для чего в запросе LEFT JOIN, а не просто JOIN? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 11:33 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
miksoftДля чего в запросе LEFT JOIN, а не просто JOIN?Товарищ просто не знает о существовании INNER JOIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 11:34 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
miksoft, Не знаю, всегда использую LEFT или INNER. Akina, В данном случае INNER будет выдавать не полный результат = 'some textN' может быть is null, is not null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 11:37 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
crazybiteВ данном случае INNER будет выдавать не полный результатРезультат будет точно такой же из-за условий в секции WHERE. Так что рекомендую слово LEFT убрать. В зависимости от селективности полей, вероятно, еще имеет смысл сделать индекс (`col1`,`col2`) у обеих таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 11:53 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
miksoft, Немного не понял про индексы... Код: sql 1. 2. 3. Вот так вот? Что это даст? А все же как мне сделать этот SELECT с JOINами как показал Akina? Это будет быстрее чем первоначальный вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 13:12 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
В итоге просто убрать LEFT? Это все оптимизирует? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 16:51 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
crazybite Код: sql 1. Одного этого достаточно. Нужен он или нет - пока сказать невозможно, т.к. вы не показали план запроса и неизвестна статистика распределения данных. Если поле `col1` уникально или близко к тому, то этот индекс не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 17:41 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39317634&tid=1831371]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 430ms |

| 0 / 0 |
