Низкая производительность запросов в поле индексированной строки, когда все значения равны NULL (база данных SYBASE)

У меня есть таблица базы данных "TABLE_A" со строковым полем, допускающим значение NULL, с некластеризованным индексом. Запрос

SELECT * FROM TABLE_A WHERE field_x = 'some value'

выполняется быстро в большинстве сред. В среде одного клиента все значения этого поля равны NULL, и этот запрос выполняется очень медленно.

Вопрос № 1: Есть ли способ в SYBASE оптимизировать для этого конкретного сценария? Кажется, что-то, что SYBASE уже должен обработать.

Вопрос № 2: есть ли способ оптимизировать этот запрос? Отфильтровывая NULLS (как в

SELECT * FROM TABLE_A WHERE field_x IS NOT NULL

) НЕ помогает с производительностью.

Я собрал статистику производительности, посмотрев Plan Viewer в Interactive SQL. Когда в этой таблице есть некоторые данные для field_x, тогда логический ввод-вывод, физический ввод-вывод и ЦП очень близки к нулю. Когда все значения равны NULL, значения ввода-вывода и ЦП аналогичны сканированию всей таблицы.

План выполнения запроса показывает, что индекс используется:

QUERY PLAN FOR STATEMENT 1 (at line 1).

STEP 1
    The type of query is SELECT.

1 operator(s) under root

   |ROOT:EMIT Operator (VA = 1)
   |
   |   |SCAN Operator (VA = 0)
   |   |  FROM TABLE
   |   |  TABLE_A
   |   |  Index :   INDEX_X
   |   |  Forward Scan.
   |   |  Positioning by key.
   |   |  Keys are:
   |   |    field_x ASC
   |   |  Using I/O Size 16 Kbytes for index leaf pages.
   |   |  With LRU Buffer Replacement Strategy for index leaf pages.
   |   |  Using I/O Size 16 Kbytes for data pages.
   |   |  With MRU Buffer Replacement Strategy for data pages.

Кроме того, я не уверен, что эта проблема воспроизводима для других баз данных, но я наблюдал это на SYBASE ASE 15.

Спасибо за помощь.

1 ответ

Если у них в массиве имеется огромный перекос данных с нулевыми данными, вы можете посмотреть на sp_modifystats, чтобы сказать оптимизатору игнорировать перекос данных (т. Е. Массу пустых значений).

Информация здесь:

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc36273.1572/html/sprocs/CHDGHEGE.htm

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

Другие вопросы по тегам