|
|
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
Имеется таблица с 2 000 000 записями. Структура: Код: 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. Медленно работает данный запрос: Код: sql 1. EXPLAIN: Время выполнения: 0.6179 сек. Данный запрос выполняет поиск по подстроке города, с известным country_id. Так же выполняется сортировала по id. Как то можно оптимизировать данный запрос? Или я не тот способ выбрал для данной цели? Если не тот, то что лучше использовать в этом случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2015, 23:28:44 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
Попробуйте создать индекс (country_id,id,title), дать команду ANALYZE TABLE cities и выполнить такой запрос: Код: sql 1. Покажите время выполнения (сделайте несколько запусков) и план запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2015, 23:48:34 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksoftПопробуйте создать индекс (country_id,id,title), дать команду ANALYZE TABLE cities и выполнить такой запрос: Код: sql 1. Покажите время выполнения (сделайте несколько запусков) и план запроса. Здравствуйте, Запрос занял 0.5563 сек. Через явное указание использование индекса title при помощью USE INDEX время выполнение сократилось до: 0.0216 сек. В EXPLAIN: Вообще это нормально так указывать USE INDEX в запросе? Ранее не работал с таким методом. И чем FORCE INDEX отличается от USE INDEX ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 00:17:06 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
tweaker7это нормально так указывать USE INDEX в запросе? Да tweaker7Через явное указание использование индекса title при помощью USE INDEX время выполнение сократилось Укажите явно использовать индекс, предложенный miksoft . tweaker7чем FORCE INDEX отличается от USE INDEX ? FORCE INDEX аналогичен USE INDEX с дополнительным указанием оптимизатору, что сканирование таблицы ОЧЕНЬ затратно, и его следует использовать в самую последнюю очередь - только если ни один из имеющихся индексов не может обеспечить выполнение запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 09:08:35 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksoft , Akina , спасибо вам большое! Код: sql 1. Время выполнения стало меньше: 0.0059 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 11:52:14 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
tweaker7, Я просил выбрать только поле id с тем, чтобы потом использовать эти данные для следующего шага. Но если результат уже устраивает, то на здоровье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 12:00:11 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
tweaker7, в твоем индексе поля местами переставь , country первым, title вторым. или другой индекс с полями наоборот создай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 12:04:57 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksofttweaker7, Я просил выбрать только поле id с тем, чтобы потом использовать эти данные для следующего шага. Но если результат уже устраивает, то на здоровье. Да так еще быстрее: 0.0022 сек. MasterZivtweaker7, в твоем индексе поля местами переставь , country первым, title вторым. или другой индекс с полями наоборот создай. А так еще быстрее: 0.0005 сек. Спасибо всем за помощь, результаты отличные! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 12:12:30 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
tweaker7, А сколько выдаст этот запрос: Код: sql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 12:14:36 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksoft, 92 записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 12:15:47 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
tweaker7miksoft, 92 записиЭто копейки. Сначала напугали двумя миллионами :) Да, для такого случая индекс (country_id, title), наверное, будет самым быстрым вариантом. Еще я б попробовал (country_id, title, id). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 12:18:59 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksofttweaker7miksoft, 92 записиЭто копейки. Сначала напугали двумя миллионами :) Да, для такого случая индекс (country_id, title), наверное, будет самым быстрым вариантом. Еще я б попробовал (country_id, title, id). Там действительно 2млн населенных пунктов по разным странам, и это 1/5 всех стран на данный момент. Просто в стране 212 (Хорватия) 92 нас. пункта начинаются на I. По этому так мало. К примеру в РФ там уже поболее, так как все пригородные поселки и деревни включены. Там помедленнее ищет. Но все же результатом доволен. miksoftЕще я б попробовал (country_id, title, id). Сейчас так и поставил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 12:24:53 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
tweaker7Да так еще быстрее: 0.0022 сек. А так еще быстрее: 0.0005 сек. Если ты думаешь, что время выполнения запроса -- хороший критерий измерения его производительности, то ты, как ни странно, ошибаешься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 16:04:14 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksofttweaker7miksoft, 92 записиЭто копейки. Сначала напугали двумя миллионами :) Да, для такого случая индекс (country_id, title), наверное, будет самым быстрым вариантом. Еще я б попробовал (country_id, title, id). ORDER BY c.id ASC там уже не оптимизируется, там ренж скан по индексу будет из-за title like 'I%' и сортировка по c.id уже потеряется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 16:06:18 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
MasterZivmiksoftпропущено... Это копейки. Сначала напугали двумя миллионами :) Да, для такого случая индекс (country_id, title), наверное, будет самым быстрым вариантом. Еще я б попробовал (country_id, title, id). ORDER BY c.id ASC там уже не оптимизируется, там ренж скан по индексу будет из-за title like 'I%' и сортировка по c.id уже потеряется.Да я на эту сортировку и не рассчитывал. С расчетом на сортировку был другой вариант - 18250093 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 16:10:02 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksoftMasterZivпропущено... ORDER BY c.id ASC там уже не оптимизируется, там ренж скан по индексу будет из-за title like 'I%' и сортировка по c.id уже потеряется.Да я на эту сортировку и не рассчитывал. С расчетом на сортировку был другой вариант - 18250093 А зачем тогда ещё одну колонку (ID) в индекс ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 16:20:06 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
MasterZivmiksoftпропущено... Да я на эту сортировку и не рассчитывал. С расчетом на сортировку был другой вариант - 18250093 А зачем тогда ещё одну колонку (ID) в индекс ?Для покрытия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 16:31:16 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksoftMasterZivпропущено... А зачем тогда ещё одну колонку (ID) в индекс ?Для покрытия. Код: sql 1. ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 16:56:28 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksoftMasterZivпропущено... ORDER BY c.id ASC там уже не оптимизируется, там ренж скан по индексу будет из-за title like 'I%' и сортировка по c.id уже потеряется.Да я на эту сортировку и не рассчитывал. С расчетом на сортировку был другой вариант - 18250093 Собственное так и сделал, а там уже через WHERE IN по id и JOIN к country и regions ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 16:58:12 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
MasterZivtweaker7Да так еще быстрее: 0.0022 сек. А так еще быстрее: 0.0005 сек. Если ты думаешь, что время выполнения запроса -- хороший критерий измерения его производительности, то ты, как ни странно, ошибаешься. Это еще почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 17:00:39 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
tweaker7WHERE INЕсли речь про IN (SELECT ...) и версия MySQL ниже 5.6, то лучше переписать на JOIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 17:10:45 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksofttweaker7WHERE INЕсли речь про IN (SELECT ...) и версия MySQL ниже 5.6, то лучше переписать на JOIN. Код: ruby 1. А как будет выглядеть запросе через JOIN ? Через OR ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 17:13:46 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
tweaker7 Код: ruby 1. Это версия 5.5.44 tweaker7А как будет выглядеть запросе через JOIN ? Через OR ?Нет, причем тут OR? Покажите, как у вас написано через IN, чтобы было что переделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 17:16:42 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksofttweaker7 Код: ruby 1. Это версия 5.5.44 tweaker7А как будет выглядеть запросе через JOIN ? Через OR ?Нет, причем тут OR? Покажите, как у вас написано через IN, чтобы было что переделать. Собственно запрос так не выполняется: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 17:21:53 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39071761&tid=1832619]: |
0ms |
get settings: |
8ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 352ms |

| 0 / 0 |
