Как я вынуждаю Пост-ГРЭС использовать конкретный индекс?

Независимо от того, что вы делаете в конечном итоге, убедитесь, что вы проверяете, что ваш вход еще не был искажен magic_quotes или каким-то другим благонамеренным мусором, и, если необходимо, запустите его через stripslashes или что-то еще, чтобы его дезинфицировать .

98
задан 2 revs, 2 users 100% 14 July 2011 в 16:07
поделиться

3 ответа

Принятие, которое Вы спрашиваете об общей "индексной функции" вывода подсказок, найденной во многих базах данных, PostgreSQL, не обеспечивает такую функцию. Это было сознательным решением, принятым командой PostgreSQL. Хороший обзор того, почему и то, что можно сделать вместо этого, может быть найдено здесь . Причины состоят в основном в том, что это - взлом производительности, который имеет тенденцию вызывать больше проблем позже по линии, когда Ваши данные изменяются, тогда как оптимизатор PostgreSQL может переоценить план на основе статистики. Другими словами, что могло бы быть хорошим планом запросов, сегодня, вероятно, не будет хороший план запросов навсегда и индексирует силу подсказок конкретный план запросов навсегда.

Как очень тупой молоток, полезный для тестирования, можно использовать enable_seqscan и enable_indexscan параметры. См.:

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

, Если у Вас нет очень серьезного основания для использования индекса, Пост-ГРЭС может делать верный выбор. Почему?

  • Для маленьких таблиц, это быстрее, чтобы сделать последовательные сканирования.
  • Пост-ГРЭС не использует индексы, когда типы данных не соответствуют правильно, Вы, возможно, должны включать соответствующие броски.
  • Ваши настройки планировщика могли бы вызывать проблемы.

См. также это старое сообщение группы новостей .

95
ответ дан 4 revs, 4 users 57% 24 November 2019 в 05:14
поделиться

Зависит от того, что делают приемники (и любые другие источники).

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

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

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

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

В спецификации довольно загадочно сказано: «Если требуется предсказуемое поведение при планировании, то этот мьютекс должен быть заблокирован потоком, вызывающим pthread_cond_broadcast () или pthread_cond_signal (). "

http: //www.opengroup.

-1
ответ дан 24 November 2019 в 05:14
поделиться

Вопрос сам по себе очень некорректный. Принудительное использование (например, enable_seqscan = off) - очень плохая идея. Было бы полезно проверить, будет ли он быстрее, но производственный код никогда не должен использовать такие уловки.

Вместо этого - объясните анализ вашего запроса, прочтите его и выясните, почему PostgreSQL выбирает плохой (на ваш взгляд) план.

В сети есть инструменты, которые помогают с чтением результатов анализа объяснения - один из них объяснение.depesz.com - написанный мной.

Другой вариант - присоединиться к каналу #postgresql на freenode irc network, и поговорим с парнями, чтобы помочь вам - поскольку оптимизация запроса не сводится к тому, чтобы «задать вопрос, получить ответ, будь счастлив». это больше похоже на беседу, в которой нужно многое проверить, многому научиться.

10
ответ дан 24 November 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: