|
|
|
Медленный запрос с 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 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 17:40:41 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksoft Код: sql 1. 2. 3. Благодарю! В итоге получился такой запрос: Код: 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. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 22:57:07 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
tweaker7, А GROUP BY зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 23:57:52 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksofttweaker7, А GROUP BY зачем? Первый селекст может выбрать по йади несколько вариантов перевода города: Moscow и Москва ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2015, 23:59:30 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
tweaker7miksofttweaker7, А GROUP BY зачем?Первый селекст может выбрать по йади несколько вариантов перевода города: Moscow и МоскваА у них будет одинаковый id? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2015, 00:02:29 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
miksofttweaker7пропущено... Первый селекст может выбрать по йади несколько вариантов перевода города: Moscow и МоскваА у них будет одинаковый id? Верно, так как город один и тот же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2015, 00:11:14 |
|
||
|
Медленный запрос с LIKE и ORDER
|
|||
|---|---|---|---|
|
#18+
Как можно суда JEFT JOIN вставить ? Код: 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. 31. 32. 33. 34. Появилась такая ситуация что поле region_id может быть NULL и из-за этого данный населенный пункт может быть пропущен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 00:42:03 |
|
||
|
|

start [/forum/topic.php?all=1&fid=47&tid=1832619]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 369ms |

| 0 / 0 |
