|
|
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
собственно интересует вопрос. как лучше всего строить таблицу и поиск, если в таблице каждая запись хранит диапазон - поля нач.диапазона и конец.диапазона и нам по заданной величине надо найти в какие диапазоны оно попадает. впервые сталкиваюсь, и нагуглить не выходит, постоянно попадаю на обычную ситуацию, найти строки, где ключ попал в заданый диапазон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 14:18:11 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 15:06:56 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
miksoft, :) спасибо. я подумал про геометрические фигуры...но я так понимаю что тамошние индексы это не тоже самое что по числу.... то есть может есть более рациональное решение для числовых интервалов, чем строить на интервал 10-20 скажем линию 10 0 -20 0 и потом искать точку 15 0. зыбал уточнить, что вариант с линиями я обудмывал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 15:24:36 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
Вообще зависит от конкретики. Распределение данных, выбираемые поля и т.п. Возможно, и простой индекс из двух полей пойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 15:27:17 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
alex564657498765453то есть может есть более рациональное решение для числовых интервалов, чем строить на интервал 10-20 скажем линию 10 0 -20 0 и потом искать точку 15 0.в мускле точно нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 16:16:25 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
специфика задачи - геолокация по айпи, есть таблица с интервалами айпиадресов(большие целые числа) - и вот надо её джоинить к выборкам из логовохранилищ, где указан айпишник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 16:24:52 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
alex564657498765453специфика задачи - геолокация по айпи, есть таблица с интервалами айпиадресов(большие целые числа) - и вот надо её джоинить к выборкам из логовохранилищ, где указан айпишник 9308178 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 16:27:11 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, "точка входит в отрезок" что в мускле для этого есть? лучше, чем ртри? я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 16:27:29 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
tangliralex564657498765453, "точка входит в отрезок" что в мускле для этого есть? лучше, чем ртри? я не знаю. можешь подробней...почему все делают акцент на ртрии, а у меня мускл выдаёт что текущая версия не поддерживает спаршил ртри индекс -версия 5.6.16-64.2-569.precise и сделал как в факе Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 16:40:05 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
лично я уже начинаю думать, может сделать таблицу свою диапазонов айпи по типу... первые три байта айпишника - мин макс четвёртого и тогда у меня получиться индекс на трибайта эти, по ним искать, а там уже сколько строк будет - а это несколько , найдёт нужный. а то вариант из фака, мол найти все гле левая граница меньше равно заданому, сортируя по левой границе лимит 1(для случая не пересекающихся диапазонов) тоже не катит - из почти 2 лямов строк почти лям простатриваеться... Код: sql 1. 2. 3. половину таблицы сканирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 16:45:50 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
alex564657498765453а то вариант из фака, мол найти все гле левая граница меньше равно заданому, сортируя по левой границе лимит 1(для случая не пересекающихся диапазонов) тоже не катит - из почти 2 лямов строк почти лям простатриваеться... Код: sql 1. 2. 3. половину таблицы сканирует.Скорее всего вы что-то не так делаете. Показывайте DDL таблицы, точный запрос, его план и прочие подробности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 16:50:06 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
miksoftalex564657498765453а то вариант из фака, мол найти все гле левая граница меньше равно заданому, сортируя по левой границе лимит 1(для случая не пересекающихся диапазонов) тоже не катит - из почти 2 лямов строк почти лям простатриваеться... Код: sql 1. 2. 3. половину таблицы сканирует.Скорее всего вы что-то не так делаете. Показывайте DDL таблицы, точный запрос, его план и прочие подробности. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:05:56 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, чуйдеса analyze table не пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:12:59 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Вы слово desc ставите точно наоборот. Надо так: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:14:44 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
alex564657498765453 Код: sql 1. 2. Кстати, тут простых UNSIGNED INT-ов будет достаточно. В других полях, возможно, тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:16:23 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
miksoft, а какая, собственно, разница? так и так надо всего одну запись найти по индексированной колонке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:16:48 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
tanglirmiksoft, а какая, собственно, разница? так и так надо всего одну запись найти по индексированной колонке.Ну, как минимум, в логике. Запрос, выдающий неверный результат, оптимизировать смысла не вижу. Без DESC всегда будет выдаваться диапазон, который начинается с 0 (или какой там самый первый в конкретной базе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:20:27 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
miksoftalex564657498765453, Вы слово desc ставите точно наоборот. Надо так: Код: sql 1. 2. 3. это уже детали... по быстрому из битвин переделывал и запутался...суть таже пол таблицы просматривает аналайз сделал. и оптимайз сделал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:23:33 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
похоже надо самому придумывать кластеризацию всего диапазона айпишников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:24:49 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
alex564657498765453miksoftalex564657498765453, Вы слово desc ставите точно наоборот. Надо так: Код: sql 1. 2. 3. это уже детали... по быстрому из битвин переделывал и запутался...Это не детали, это неверная логика запроса. alex564657498765453суть таже пол таблицы просматриваетПодробности будут? Включая замеры времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:27:19 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
alex564657498765453похоже надо самому придумывать кластеризацию всего диапазона айпишников.Действительно, зачем встроенную оптимизацию использовать, лучше свою придумать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:27:54 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
miksoftБез DESC всегда будет выдаваться диапазон, который начинается с 0 (или какой там самый первый в конкретной базе).но даже для этого не надо просматривать полтаблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:31:02 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
tanglirmiksoftБез DESC всегда будет выдаваться диапазон, который начинается с 0 (или какой там самый первый в конкретной базе).но даже для этого не надо просматривать полтаблицыПо идее не надо. Насколько я понимаю, MySQL и не просматривает. Иначе вместо "Using index condition" было бы обычное using index. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 17:33:06 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
miksofttanglirпропущено... но даже для этого не надо просматривать полтаблицыПо идее не надо. Насколько я понимаю, MySQL и не просматривает. Иначе вместо "Using index condition" было бы обычное using index. таки да...пишет потенциальных 900 000 строк, но замер времени 30-40 мсек, как и выборка по индексу конкретного значения из других таблиц (правда на 20 млн записей)... итого выбор Код: sql 1. 2. 3. 4. 5. 6. 7. 8. отрабатывает от 30 до 50 мсек. но если выбирать не так, а скажем последние 200 логов приджоинить Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 18:03:23 |
|
||
|
оптимизация between : where 'const' between f1 and f2
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, так вот, последний запрос отрабатывает за 8,798 sec а так как надо обычно 200 логов последних посмотреть, то ...у меня хейдискл повис при запросе к 200 последним. походу надо тригером при вставке, одна колонка будет автозаполняться - сраззу ссылка на нужный локейшин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 18:06:22 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38716072&tid=1834358]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 199ms |
| total: | 375ms |

| 0 / 0 |
