Запрос к большой таблице с фильтром по сравнению с небольшой таблицей в базе данных - какой-нибудь выигрыш в производительности? - PullRequest
0 голосов
/ 18 июня 2019

У меня есть большая таблица с 10 миллионами записей, и она используется для одного из наших существующих приложений. мы работаем над новым приложением, для которого требуется только отфильтрованный набор результатов большой таблицы с 7000 записями.

Мой вопрос: будет ли какой-либо выигрыш в производительности для таблицы меньшего размера с 7000 записями по сравнению с запросом к большой таблице с условием фильтра (и он будет объединен с несколькими другими таблицами в схеме, которые полностью независимы от существующего приложения)? или я должен избегать избыточности, сохраняя все данные в одной таблице? Это дизайн в хранилище данных. Пожалуйста, предложите!

Спасибо!

1 Ответ

0 голосов
/ 18 июня 2019

Практически для любой базы данных использование таблицы примеров будет заметно быстрее.Это связано с тем, что чтение записей потребует загрузки меньшего количества страниц данных.

Кроме того, если обновляется базовая таблица, «снимок» изолируется от блокировок страницы, таблицы и строки, которые происходят на главнойТаблица.Это хорошо с точки зрения производительности, но это означает, что версии могут быть несинхронизированы, что может быть плохо.

И, с точки зрения запросов, статистика выборки будет более точной.Это помогает оптимизатору выбирать лучшие планы запросов.

Я могу вспомнить два случая, когда производительность может существенно не улучшиться.Первый - если ваша база данных поддерживает кластеризованные индексы, а нужные вам строки определяются диапазоном ключей индекса (или одним ключом).Они будут «смежными», поэтому кластерный индекс будет сканировать примерно одинаковое количество страниц.Фактическая структура индекса имеет небольшие издержки.

Точно так же, если ваши записи были настолько большими, что на страницу данных приходилась одна запись, преимущество второй таблицы было бы меньше.Это исключит накладные расходы при доступе к индексу, но не уменьшит количество операций чтения.

Ни одно из этих соображений не говорит о том, следует ли использовать отдельную таблицу.Вы должны проверить в своей среде.Затраты на управление отдельной таблицей (а также создание и удаление ее с точки зрения производительности и сложности приложения) могут перевесить небольшой прирост производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...