|
оптимизация left outer join (ФИАС)
|
|||
---|---|---|---|
#18+
Доброго времени суток, видел, что существует уже достаточно много тем про оптимизацию JOIN-ов в SQLite, но к своему стыду с пользой применить к своей проблеме не удалось есть база адресов(около 2,5Г), в ней лежат актуальные названия улиц и устаревшие. Нужно показывать новые и рядом их устаревшее наименование, если оно есть. Более подробное описание базы: http://fias.nalog.ru/Public/DownloadPage.aspx делаю следующий запрос: Код: 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.
экпериментально установлено, что сам SQLite выбирает индекс: Код: sql 1. 2.
и руками ему указываю Код: sql 1. 2.
Работает сие счастье на 3,5к московских улиц около минуты. Прошу помочь, пожалуйста, как можно оптимизировать данный запрос. И как в целом можно ускорить работу left outer join-ов. Остальные игрой с индексами удалось заставить мало-мальски прилично работать, но все-равно хочется быстрее. Вроде встречал, что имеет смысл увеличить размер страницы, но не совсем понял как это можно сделать и насколько именно стоит P.S.: база - ФИАС, который пришел на смену КЛАДР. Может кто работает(ал) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 16:06 |
|
оптимизация left outer join (ФИАС)
|
|||
---|---|---|---|
#18+
burashka, Операция <> не может использовать индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2012, 20:04 |
|
оптимизация left outer join (ФИАС)
|
|||
---|---|---|---|
#18+
burashka, Оптимизируй саму БД под твои запросы. Благо сама БД практически статична. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 10:30 |
|
оптимизация left outer join (ФИАС)
|
|||
---|---|---|---|
#18+
RXL, исключил из индексов поля с неравно при индексах Код: sql 1. 2.
и Код: sql 1. 2.
1,5c на извлечение 3500 записей из примерно 1,3млн. Для улиц явно долго, для базы не знаю. Реально быстрее сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 10:47 |
|
оптимизация left outer join (ФИАС)
|
|||
---|---|---|---|
#18+
burashka, Конечно реально. Переделайте базу полностью: табличка регионов, городов, улиц, у всех числовые идентификаторы-PK, нормализация, логичные уникальные индексы, никаких километровых индексов по хрен-знает-каким-полям. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 10:59 |
|
оптимизация left outer join (ФИАС)
|
|||
---|---|---|---|
#18+
А это у вас часом не КЛАДР? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 11:00 |
|
оптимизация left outer join (ФИАС)
|
|||
---|---|---|---|
#18+
RXL, почти. я же приписал в PS, что это ФИАС, наследник КЛАДРа. Сам КЛАДР умер: http://habrahabr.ru/post/140378/ Разбить на таблички, кажется, не поможет. Там все-равно понадобятся left join-ы в которых весь затык. like по всей базе с целью найти все населенные пункты начинающийся с определенного сочетания двух букв - 0,5-0,6мс. получить с помощью join названия вместо кодов родительских региона, района и т.п. - 6-10с хотя, конечно, к улицам можно заранее присобачить старые названия. но тут вопрос: как в sqlite сделать update-select? если пишу update tab1, tab2 set ... - ошибка. если update tab1 set pol = (select tab2.pol from tab2 where tab1.pol2 = tab2.pol2) - то пишет, что не найдено поле tab1.pol2 скоро скину на боевой сервер, посмотрю как на нем будет. может кеширование при большом потоке запросов спасет, если нет - придется думать как перелопатить структуру ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 11:15 |
|
оптимизация left outer join (ФИАС)
|
|||
---|---|---|---|
#18+
burashka, Не обязательно пользоваться именно той структурой базы. Можно иметь свою и написать конвертер. Попробуйте изменить поля xxxxCODE на INTEGER NOT NULL и сделать индекс согласно иерархии, описанной в п.2.1.1 документации. Можно сделать уникальный индекс по всем этим полям или неуникальный, исключив несколько полей справа. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 21:16 |
|
оптимизация left outer join (ФИАС)
|
|||
---|---|---|---|
#18+
Предыдущий в иерархии объект можно выбрать также посредством PARENTGUID. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 21:19 |
|
оптимизация left outer join (ФИАС)
|
|||
---|---|---|---|
#18+
авторADDOLD.ACTSTATUS <> '1' Учитывая, что значений всего два - 0 и 1, сравнение "<> 1" эквивалентно "= 0". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 21:22 |
|
|
start [/forum/topic.php?fid=54&tid=2009042]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 174ms |
0 / 0 |