Как переписать запрос в PostgreSQL 8.3 - PullRequest
1 голос
/ 27 июля 2010

Я довольно новичок в SQL и мне нужна помощь с определенной задачей.У меня есть запрос, который вызывается нашим кодом Flex / Java, который объединяет несколько таблиц для получения информации.Запустив Explain Analyze, я увидел, что запрос занимает более 15 минут, что иногда даже приводит к превышению времени ожидания, если сайт загружен.Я пытаюсь создать правило или триггер, который определяет, вызван ли запрос и выбирает ли данные из таблицы материализованного представления.Я пытался реализовать правило для этого, но мне было трудно, когда я получал ошибки при попытке объединить несколько таблиц в правиле.В принципе, есть ли способ, будь то правило, триггер или что-то еще, на что я не обращал внимания, чтобы я мог увидеть, выполняется ли определенный запрос, который я могу заменить этим запросом из другой таблицы?Заранее спасибо.

Пример запроса:

select
   player_id,
   player_names,
   player_level,
   current_location
from
   server_info
   join players using (player_id)
   join locations using (location_id)
where
   current_location = 'Central Hub'

1 Ответ

2 голосов
/ 27 июля 2010

Почему бы просто не изменить приложение на источник материализованного представления, если вы этого хотите? Нет никакого способа переписать сложное объединение, чтобы найти несвязанную таблицу - о которой я знаю. И, если бы вы могли действительно хотеть иметь глубокую вуду, подобную этой, в вашей системе планирования запросов / правил? SQL VIEW s реализованы с SELECT RULE, но это не приводит вас от сложного запроса к материализованному представлению. Вы получаете от TABLE1 до TABLE2 .

Лучше спросить, что это за типы player_id и location_id, они оба int и имеют ли они оба индекса btree? Индексируется current_location и используется ли оно для условных выражений равенства, регулярных выражений или LIKE? Какую версию Postgresql вы используете? Можете ли вы прикрепить EXPLAIN ANALYZE запроса, который вызывает большое время ожидания?

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