当所有值都为NULL时,索引字符串字段的查询性能很差(SYBASE数据库)

时间:2015-10-15 22:38:48

标签: sybase sybase-ase15

我有一个数据库表'TABLE_A',其中有一个可以为空的字符串字段'field_x',上面有非聚集索引。 查询

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

)对性能没有帮助。

我通过查看Interactive SQL中的Plan Viewer来收集性能统计信息。当此表中有一些数据用于field_x时,逻辑I / O,物理I / O和CPU非常接近于零。当所有值都为NULL时,I / O和CPU值类似于扫描整个表。

查询执行计划显示正在使用索引:

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 个答案:

答案 0 :(得分:0)

如果列中的空数据存在大量数据偏差,则可以查看sp_modifystats以告知优化器忽略数据偏差(即NULL的质量)。

信息在这里:

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

如果没有重要测试,请不要使用,请记住,您需要在每次运行更新统计信息后重新修改。