Подтвердить что ты не робот

Руководства по настройке запросов PostgreSQL?

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

Например, в Oracle я могу попытаться добавить подсказки, чтобы игнорировать индексы или использовать sort-merge vs. коррелированные соединения, но я не могу найти многого при настройке Postgres, кроме с использованием явных соединений и рекомендаций, если массовые таблицы загрузки.

Существуют ли какие-либо такие руководства, поэтому я могу сосредоточиться на настройке большинства прогонов и/или неэффективных запросов, надеюсь, без ущерба для текущих хорошо выполняющихся запросов?

Я даже был бы рад найти что-то, что сравнивало бы то, как некоторые типы запросов выполнялись относительно других баз данных, поэтому я лучше понял, чего не следует избегать.

обновление:

Я должен был упомянуть, я взял все классы Oracle DBA вместе с их моделированием данных и SQL-тюнингами в течение 8 дней... поэтому я знаю об "EXPLAIN", но это больше, чтобы рассказать вам, что происходит неправильно с запросом, не обязательно, как сделать его лучше. (например, "while" var = 1 или var = 2 "и" while var in (1,2) "считается одинаковым при создании плана выполнения? Что делать, если я делаю это с 10 перестановками? Когда многостолбцы Используемые индексы? Есть ли способы, чтобы оптимизатор планировал оптимизацию для быстрого запуска и быстрого завершения? Какого рода" getchas" можно было бы использовать при переходе с mySQL, Oracle или некоторых других СУБД?)

Я мог бы написать любой сложный запрос по десяткам, если не по сотням способов, и я надеюсь, что им не придется их проверять и найти, какой из них лучше всего работает с помощью проб и ошибок. Я уже нашел, что "SELECT count (*)" не будет использовать индекс, но "SELECT count (primary_key)"... может быть, "PostgreSQL для опытных пользователей SQL-пользователей", который объяснял сортировки запросов к избегать, и как лучше их переписать, или как заставить планировщика справиться с ними лучше.

обновление 2:

Я нашел Сравнение различных реализаций SQL, который охватывает PostgreSQL, DB2, MS-SQL, mySQL, Oracle и Informix и объясняет, как и что вы можете сделать, и его раздел ссылок, связанный с Oracle/SQL Server/DB2/Mckoi/MySQL Database Equivalents ( это то, что предлагает его название), а также справочник wiki-ссылки Справочник по диалогам SQL, который охватывает все, что люди вносят (включая некоторые DB2, SQLite, mySQL, PostgreSQL, Firebird, Vituoso, Oracle, MS-SQL, Ingres и Linter).

4b9b3361

Ответ 2

Что касается плохо работающих запросов - объясните анализ и прочитайте его.

Вы можете поместить отчет об анализе на сайт, например explain.depesz.com - это поможет вам найти элементы, которые действительно занимают больше всего времени.

Ответ 3

Есть хороший онлайн-инструмент, который выводит результат EXPLAIN ANALYZE и графически показывает вам критические части (например, неправильные оценки, горячие точки и т.д.)

http://explain.depesz.com/help

Кстати, я думаю, что размещенные запросы становятся общедоступными, а ссылка "предыдущие объяснения" была затронута спам-ботами.

Ответ 4

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

Ответ 5

Инструмент PGAdmin3 содержит графический инструмент для объяснения того, как обрабатывается запрос. Это также особенно полезно для показа, где происходят сканирование таблицы.

Ответ 6

Лучшее, что я видел, здесь: http://wiki.postgresql.org/wiki/Using_EXPLAIN, но последний PDF файл существует с 2008 года, поэтому может быть что-то более новое. Мне интересно услышать другие ответы пользователей.

Кроме того, что-то заваривается в пакетах contrib: http://www.sai.msu.su/~megera/wiki/plantuner