Оптимизация производительности Netezza
Я начинаю работать с Netezza на Aginity, чтобы обрабатывать миллионы записей на таблицу. Я читал в Интернете о том, как оптимизировать таблицы, чтобы загрузка данных и выполнение запросов к ним были относительно быстрыми, и у меня есть несколько вопросов.
1) Одна вещь, которую я прочитал, заключалась в том, что распределение, которое вы выбираете при создании таблицы, будет влиять на скорость выполнения запроса к таблице. По большей части, лучше ли распространять по первичному ключу? И скажем, нет первичных ключей, но вместо этого в таблице есть внешние ключи, хорошо ли это распределять по обоим внешним ключам или только по одному?
2) Я прочитал о том, как вы можете увидеть перекос вашей таблицы (который, я думаю, основан на вашем дистрибутиве), выполнив этот запрос:
SELECT count(*), datasliceid from SCHEMA.TableName group by datascliceid ordery by datasliceid
Таким образом, при этом я заметил, что минимальное количество данных на datasliceid было 21 530, а максимальное - 22 456. Есть 240 данных, которые были возвращены. Это хорошо или данные должны распределяться намного более равномерно?
3) Последнее, но не менее важное, я пытаюсь запустить:
generate statistics on SCHEMA.TABLENAME
внутри Aginity, но когда я это делаю, я просто получаю сообщение The command completed successfully
но ничего не появляется Как мне просмотреть эту информацию?
1 ответ
Я попробую: 1) беспокоиться только о распределении для ДЕЙСТВИТЕЛЬНО больших таблиц (используйте RANDOM для всех маленьких / средних таблиц). Кроме того: распространяйте только по одному столбцу, и только если вы присоединитесь к нему МНОГО 2) это распределение в не перекос на мой взгляд. Не беспокойся 3) когда вы обновляете статистику в базе данных, оптимизатор базы данных в первую очередь делает лучший выбор, когда вы запускаете (сложный) sql против нее. Однако вы можете прочитать эту информацию из таблиц каталога впоследствии. Запросы на это можно найти в Интернете:)