2016-05-29 4 views
0

запрашиваемая таблица содержит миллиарды записей, а предложение where запроса select основывается на неиндексированных столбцах. Таким образом, обычный запрос выбора выполняет полное сканирование таблицы &, поэтому требуется больше времени. Я пытаюсь использовать параллельную функцию, чтобы увидеть, помогает ли она улучшить время. Но хотелось бы знать, будет ли параллель действительно помогать для запросов Select в одной таблице с предложением where в неиндексированных столбцах?Выберет помощь параллельного запроса для неиндексированного столбца в разделе where?

Пример:

Select /*parallel(customer_data,4)*/ customer_id,name from customer_data where time_create >= :<min_time> AND customer_status='P' 
+0

Возможно, вы захотите добавить, какие типы РСУБД вы используете, а также о том, как вы планируете " заставить систему использовать параллельный подход. – deroby

ответ

0

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

  1. Ваш пример показывает комментарий, а не подсказку - вам не хватает знака + (плюс), поэтому параллелизм не будет применяться. Вы должны иметь

    select /*+ parallel(customer_data, 4) */ customer_id, name ...

  2. Сколько строк будет извлекаться из таблицы? Ответ на этот вопрос не о том, где вы можете использовать параллелизм, но больше о том, должны ли вы

  3. Сколько ядер ядра имеет сервер базы данных и сколько пропускной способности IO обеспечивает хранилище? Параллелизм (по дизайну) может потреблять большой объем ресурсов; и часто количество доступной пропускной способности ввода-вывода недостаточно для поддержки высокой степени параллелизма. Очень грубое эмпирическое правило состоит в том, что каждый процессорный ядро ​​может потреблять от 50 Мбайт/с до 200 МБ/с.