23 / 23 / 11
Регистрация: 05.02.2010
Сообщений: 314
|
|
Как можно увеличить скорость подсчета строк в таблице19.06.2013, 00:52. Показов 6460. Ответов 15
Метки нет Все метки)
(
Доброй ночи.
Есть таблица на 9500000 строк как можно увеличить скорость подсчета строк в таблице если по одному параметру может выбрать 8999999 строк.
0
|
19.06.2013, 00:52 | |
Ответы с готовыми решениями:
15
Как увеличить скорость вычислений 500 000 строк? Как увеличить скорость добавления строк на листе Excel
|
23 / 23 / 11
Регистрация: 05.02.2010
Сообщений: 314
|
||
19.06.2013, 21:33 [ТС] | ||
Добавлено через 39 минут Вот план, можно перевести "Hash Join (cost=2.27..676918.63 rows=9020883 width=1166) (actual time=0.051..31650.458 rows=8999999 loops=1)" " Hash Cond: (f.screen_version_id = sv.id)" " -> Nested Loop (cost=1.11..552880.33 rows=9020883 width=654) (actual time=0.030..28141.769 rows=8999999 loops=1)" " -> Seq Scan on tbl_release r (cost=0.00..1.25 rows=1 width=8) (actual time=0.007..0.009 rows=1 loops=1)" " Filter: (id = 15)" " Rows Removed by Filter: 19" " -> Hash Join (cost=1.11..462670.25 rows=9020883 width=654) (actual time=0.018..26458.778 rows=8999999 loops=1)" " Hash Cond: (f.type_film_id = tf.id)" " -> Seq Scan on tbl_films f (cost=0.00..338632.00 rows=9020883 width=142) (actual time=0.005..22186.697 rows=8999999 loops=1)" " Filter: (release_id = 15)" " Rows Removed by Filter: 500002" " -> Hash (cost=1.05..1.05 rows=5 width=520) (actual time=0.006..0.006 rows=5 loops=1)" " Buckets: 1024 Batches: 1 Memory Usage: 1kB" " -> Seq Scan on tbl_type_films tf (cost=0.00..1.05 rows=5 width=520) (actual time=0.002..0.003 rows=5 loops=1)" " -> Hash (cost=1.07..1.07 rows=7 width=520) (actual time=0.014..0.014 rows=7 loops=1)" " Buckets: 1024 Batches: 1 Memory Usage: 1kB" " -> Seq Scan on tbl_screen_version sv (cost=0.00..1.07 rows=7 width=520) (actual time=0.007..0.009 rows=7 loops=1)" "Total runtime: 32230.258 ms"
0
|
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
|
|
22.06.2013, 16:04 | |
Не мог я сразу ответить, если еще актуально!
Отступы потеряли! Это важно для понимания структуры плана. Простые рекомендации, если лень читать доки. 1. Обращайте внимание на "actual time" и стрелочками помечены операции, которые исполнитель запроса делает для получения результатов вашего запроса. 2. Seq Scan - последовательный поиск по таблице! ПЛОХО! Проверьте индексы по полю, которое ниже строчкой стоит под Filter. Индекс выгоднее использовать. 3. Не понятно, откуда взялся Nested Loop (вложенный цикл, то есть перебор записей). У вас что таблицы в запросе не связаны? Это ПЛОХО! Остальное уже мало времени занимает, пока пропустим
0
|
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
|
|
23.06.2013, 17:49 | |
Nested Loop: Базе приходится перелапачивать n*m итераций для объединения двух таблиц с n и m записями. Nested Loop хорошо для маленьких таблиц - быстрее выполняется, чем Hash Join, так как не нужно строить хэши для объединения, но для больших таблиц - это фактически гарантировано тормоза.
0
|
23 / 23 / 11
Регистрация: 05.02.2010
Сообщений: 314
|
|
24.06.2013, 18:20 [ТС] | |
Вот новый, если можно про комментировать
"Aggregate (cost=342640.87..342640.88 rows=1 width=4) (actual time=407536.830..407536.830 rows=1 loops=1)" " -> Bitmap Heap Scan on tbl_films f (cost=67247.68..335103.51 rows=3014946 width=4) (actual time=404609.514..407143.771 rows=2999999 loops=1)" " Recheck Cond: (release_id = 7)" " Rows Removed by Index Recheck: 119" " -> Bitmap Index Scan on index_tbl_films_release_id (cost=0.00..66493.95 rows=3014946 width=0) (actual time=404607.541..404607.541 rows=3000000 loops=1)" " Index Cond: (release_id = 7)" "Total runtime: 407537.071 ms"
0
|
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
|
|
26.06.2013, 07:17 | |
Bitmap Index имеет ограниченные условия применения (в основном для данных, которые очень редко меняются, ибо существенные накладные расходы на создание и поддержание целостности индекса)
См. например здесь и здесь Попробуйти заменить на обычный b-tree индекс у соответствующих таблиц. И покажите сам запрос. Не понимаю почему делается heap scan и index scan. Не могу представить, как это в запросе может выглядеть.
0
|
23 / 23 / 11
Регистрация: 05.02.2010
Сообщений: 314
|
||||||||||||||||
26.06.2013, 23:43 [ТС] | ||||||||||||||||
0
|
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
|
|||||||||||||||||||||
01.07.2013, 23:32 | |||||||||||||||||||||
Был в отъезде... неудобно отвечать было... опять же, если еще актуально
1. Не знаю какая версия у вас postgres, но можете прочитать этот мануал 2. Сделать VACUUM tbl_film, как там написано + включить indexscanonly, если соотв. версия postgres. 3. Я провел эксперименты над таблицей в 9 млн. записей. Указанными выше способами довел выполнение запроса с 17000 ms (seq scan без индексов), до 0,170 ms (индексы, плюс кеширование уже помогало быстро выбирать результаты на запрос).
Включаем, все что написано в 1 и 2
Вообщем мораль, если нет частых (и массивных) изменений данных, то включить сканирование по индексу, вакуумизировать, также не создавать излишних (которые не участвуют в оптимизации запросов) индексов - это тоже отнимает время Все результаты приведены для домашнего ноута (Core2Duo, 2,5Ghz, postgresql 9.2.4, поставлен в Gentoo из portage без каких-либо извратов)
0
|
23 / 23 / 11
Регистрация: 05.02.2010
Сообщений: 314
|
||
09.07.2013, 00:35 [ТС] | ||
2. vacuum сделал, а где включить indexscanonly (версия 9.2.4.1). 3. Как лучше сделать индексы по каждому поисковому полю или один составной индекс? Как можно настроить кеширование запросов?
0
|
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
|
||||
09.07.2013, 16:50 | ||||
1. Сделать обычный индекс (без указания алгоритма) для таблицы по тем полям, которые участвуют в where 2. Сделать вакуумизацию 3. Включить "поиск только с использованием индексов" Кэширование как-таковое уже включено. То есть если дважды выполнить один и тот же запрос, то результаты для второго запроса результаты появятся гораздо быстрее. Для многопользовательского режима это может быть актуально. Если пользователи часто запрашивают одни и те же данные, не нужно по многу раз перевыполнять один и тотже запрос. Резульаты возмуться из кеша, если данные не изменялись конечно. Упралвять кеширование можно через параметры управления сервером. Об этом написана целая глава 18 в документации. На русском даже не знаю, есть или нет. Спрашивайте, если потребуется, попробуем разобраться.
0
|
23 / 23 / 11
Регистрация: 05.02.2010
Сообщений: 314
|
||
09.07.2013, 18:32 [ТС] | ||
0
|
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
|
|
09.07.2013, 23:29 | |
С динамическим фильтром может быть проблема: или гибкость или скорость. Обычно одно другое взаимоисключает. Но лучше всего протестировать! Если производительность устроит, значит индексы оставить как есть. Если нет, то тогда придется как-то менять модель данных, чтобы справиться с большим объемом данных и одновременно обеспечивать соотв. уровень гибкости фильтров при выборке.
0
|
23 / 23 / 11
Регистрация: 05.02.2010
Сообщений: 314
|
|
10.07.2013, 14:33 [ТС] | |
Для хранения списка жанров к фильму есть таблица связи в ней есть поле film_id и genre_id. При выборке например по "году выпуска" и жанру "ужасы" можно как то склеить поле из таблицы tbl_films.id с таблицей tbl_relations.film_id чтоб быстро получить количество строк соответствующему условию. Сейчас выполняется за 4,5с., а если отдельно выполнить запрос для получения количества строк только по жанру то запрос выполняется за 0,4с.
0
|
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
|
||||||||||||||||||||||||||
01.08.2013, 18:33 | ||||||||||||||||||||||||||
Гм-гм... времени правда прошло три недели, но не мог я раньше ответить.
При оптимизации запросов пока (IMHO) лучше не придумали подхода, чем смотреть, что показывает план запроса - в нем мы видим, как СУБД выполняет запрос (как она "думает" и совпадает ли ее "думанье" с нашим). Мне сложно точно воспроизвести ситуацию, потому что я не знаю ни вашей модели данных, ни ваших данных, но попробую показать на простом примере. У меня остались предыдущие данные (9 млн. записей), я к ним приделал таблицу genre. Вот так:
Запускаю анализ плана:
Проверяем, что это так и есть: Видим 1,4 с. Много! Создаем индекс для условия genre_id=8
Получилось где-то раз в 10 быстрее. Надеюсь алгоритм действий понятен. Много зависит от организации модели данных и запросов, которые строятся по этой модели. Будут вопросы, присылайте.
0
|
01.08.2013, 18:33 | ||||||
Помогаю со студенческими работами здесь
16
Максимальная скорость беспроводного соединения: 54 Мбит/с - можно ли увеличить ее? Можно ли увеличить скорость на мамке Shuttle AB52 USB1.1 до USB2.0? Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
|
Полностью асинхронный счётчик на логике (сумматорах) трёх состояний и асинхронных регистрах трёх состояний. Структура "электронный Buttom Up"
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution
В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
|
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
|
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
|
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
|
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
|
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
|
Реализация конвейеров машинного обучения с Python и Scikit-learn
AI_Generated 23.04.2025
Мир данных вокруг нас растёт с каждым днём, и умение эффективно обрабатывать информацию стало необходимым навыком. Специалисты по машинному обучению ежедневно сталкиваются с задачами предобработки. . .
|
Контроллеры Kubernetes Ingress: Сравнительный анализ
Mr. Docker 23.04.2025
В Kubernetes управление входящим трафиком представляет собой одну из ключевых задач при построении масштабируемых и отказоустойчивых приложений. Ingress — это API-объект, который служит вратами. . .
|
Оптимизация кода Python с Cython и Numba
py-thonny 23.04.2025
Python прочно обосновался в топе языков программирования благодаря своей простоте и гибкости. Разработчики любят его за читабельность кода и богатую экосистему библиотек. Но у этой медали есть и. . .
|