Оператор ANALYZE может использоваться в PostgreSQL для сбора статистических данных таблиц. Однако я не хочу вставлять эти данные в таблицы, мне просто нужно оценить стоимость некоторых запросов, так или иначе вручную указывать статистические данные таблиц в PostgreSQL без фактического ввода данных в него?Как вручную обновлять статистические данные таблиц в PostgreSQL
ответ
Я думаю, что вы путаетесь ANALYZE
с EXPLAIN ANALYZE
. Есть разные вещи.
Если вам нужны затраты и сроки запроса без применения изменений, единственная реальная опция, которую вы имеете, - это начать транзакцию, выполнить запрос под EXPLAIN ANALYZE
, а затем ROLLBACK
.
Это все еще выполняет запрос, а это означает, что:
- процессорного времени и I/O потребляются
- Замки все еще принимаются и проводятся в течение всего срока
- новые строки фактически записаны в таблицах и индексы, но никогда не заметны. Они очищаются в следующем
VACUUM
.
Вы уже можете ОБЪЯВЛЯТЬ ANALYZE запрос даже без вставленных данных, это поможет вам получить представление о плане выполнения.
Но нет таких вещей, как настоящие данные :) Что вы можете сделать, как обходное решение, НАЧАЛО транзакции, ВСТАВЬТЕ некоторые данные, ОБЪЯСНИТЕ АНАЛИЗИРОВАТЬ ваш запрос, а затем ROLLBACK свою транзакцию.
Пример:
mydatabase=# BEGIN;
BEGIN
mydatabase=# INSERT INTO auth_message (user_id, message) VALUES (1, 'foobar');
INSERT 0 1
mydatabase=# EXPLAIN ANALYSE SELECT count(*) FROM auth_message;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------
Aggregate (cost=24.50..24.51 rows=1 width=0) (actual time=0.011..0.011 rows=1 loops=1)
-> Seq Scan on auth_message (cost=0.00..21.60 rows=1160 width=0) (actual time=0.007..0.008 rows=1 loops=1)
Total runtime: 0.042 ms
(3 lignes)
mydatabase=# ROLLBACK;
ROLLBACK
mydatabase=# EXPLAIN ANALYSE SELECT count(*) FROM auth_message;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------
Aggregate (cost=24.50..24.51 rows=1 width=0) (actual time=0.011..0.011 rows=1 loops=1)
-> Seq Scan on auth_message (cost=0.00..21.60 rows=1160 width=0) (actual time=0.009..0.009 rows=0 loops=1)
Total runtime: 0.043 ms
(3 lignes)
1-й EXPLAIN ANALYZE показывает, что Существовал некоторые "временные" данных (строки = 1)
Это не строго "ложно", но, по крайней мере, план PostgreSQL выполнение (и различные оптимизации, которые оно может сделать) должно быть, ИМХО, лучше, чем без данных (отказ от ответственности: чисто интуитивный)
А ... и добавив ВАКУУМНЫЙ АНАЛИЗ your_table после того, как ваш ROLLBACK может помочь очистить потенциальные изменения в статистике, используемой для плана выполнения ... Но я не эксперт PostgreSQL, я не уверен, что если откатные транзакции также отображают статистику отката , –
- 1. Postgresql: как собираются статистические данные в histogram_bounds
- 2. как хранить статистические данные?
- 3. Как рассчитать эти статистические данные?
- 4. Текущие статистические данные
- 5. PostgreSQL - одновременно вставлять данные в несколько таблиц
- 6. Импортировать/обновлять существующие строки в PostgreSQL
- 7. Извлечь данные из нескольких таблиц в postgresql
- 8. MySQL: выбрать различные статистические данные
- 9. Статистические данные о программном бизнесе
- 10. Openx: удалить все статистические данные
- 11. Неправильные статистические данные Sitelore sublayout?
- 12. Подход к тому, как хранить статистические данные
- 13. Как получить статистические данные о пробеге?
- 14. Как правильно получить статистические данные диаграммы
- 15. Как статистические данные с использованием языка R?
- 16. Как получить статистические данные от teamcity?
- 17. Как динамически обновлять последовательность в PostGreSQL
- 18. Атомно обновлять несколько связанных таблиц
- 19. Как вручную обновлять и прокручивать JScrollPane
- 20. PostgreSQL JOIN данные из 3 таблиц
- 21. Как я могу получить статистические данные о соединениях «без дела в транзакции» с моим экземпляром PostgreSQL?
- 22. Должен ли я обновлять данные вручную после NSPersistentStoreDidImportUbiquitousContentChangesNotification
- 23. Как обновлять данные столбца?
- 24. Как получить данные из нескольких таблиц (PostgreSQL) в Java Servlet?
- 25. данных связывания вручную обновлять в WPF MVVM
- 26. Как периодически обновлять таблицу в Postgresql через данные, полученные из php API, используя cronjob?
- 27. PostgreSQL: ОБНОВЛЯТЬ ... ПО ОТМЫВАНИЮ ВСТАВКИ?
- 28. Как записывать статистические данные в файлы перетаскивания в java
- 29. Нокаут: вручную обновлять наблюдаемый через код?
- 30. Datamining, данные-поисковая, анализ и статистические Идеи
Привет, спасибо за ваш ответ. Ну, может быть, мое заявление несколько неясное, я имею в виду, что я хочу найти способ вручную указать статистику таблиц, скажем, что таблица A не имеет данных на деле, но я хочу, чтобы PostgreSQL считал, что там 1000 строк в этой таблице, поэтому я могу использовать статистику макета для оценки запроса. – yingzhox
@ user1780833 Да, очень неясно! На этом этапе рассмотрите вопрос о публикации нового, который включает в себя такие весьма важные детали и любой другой соответствующий контекст. –