在创建文本索引时,还必须选择一种刷新类型。支持的文本索引刷新类型有三种:立即、自动和手动。在创建时定义文本索引的刷新类型。可以在创建文本索引后更改刷新类型,但快速文本索引除外。
IMMEDIATE REFRESH IMMEDIATE REFRESH 文本索引在基础表中的数据发生更改时进行刷新,仅当数据必须保持最新、索引列相对较短或数据更改不频繁时才建议使用。
文本索引的缺省刷新类型是 IMMEDIATE REFRESH。
对已有 AUTO REFRESH 或 MANUAL REFRESH 文本索引,无法将其更改为 IMMEDIATE REFRESH 文本索引。相反,必须先将其删除,然后重新创建为 IMMEDIATE REFRESH 文本索引。
IMMEDIATE REFRESH 文本索引支持所有隔离级别。它们会在创建时填充,并在此初始刷新过程中保持该表的独占锁。
AUTO REFRESH AUTO REFRESH 文本索引会按照所指定的时间间隔自动进行刷新,因此建议在可以接受某些数据过时的情况下使用。过时索引的查询返回自上次刷新后未更改的匹配行。因此,查询不会返回自上次刷新后所插入、删除或更新的行。
满足以下一个或多个条件时,AUTO REFRESH 文本索引的刷新频率也可能要比所指定的间隔更频繁:
距离上次刷新的时间大于刷新间隔。
所有待执行行的总长度(sa_text_index_stats 系统过程返回的 pending_length)超过总索引大小(sa_text_index_stats 返回的 doc_length)的 20%。
已删除的长度超过总索引大小 (doc_length) 的 50%。在这种情况下,将始终执行完全重建,而非增量更新。
AUTO REFRESH 文本索引使用隔离级别 0 进行刷新。
AUTO REFRESH 文本索引在创建时不包含数据,因此仅在首次刷新后才可用(首次刷新通常在创建文本索引后的一分钟之内进行)。还可以使用 REFRESH TEXT INDEX 语句手动刷新 AUTO REFRESH 文本索引。
AUTO REFRESH 文本索引在重装过程中不会进行刷新,除非为 dbunload 指定 -g 选项。
MANUAL REFRESH MANUAL REFRESH 文本索引仅当您刷新它们时才会刷新,因此建议在以下情况下使用:基础表中的数据很少更改、可接受较大程度的数据过时,或者要在某个事件后或满足某个条件后进行刷新。过时索引的查询返回自上次刷新后未更改的匹配行。因此,查询不会返回自上次刷新后所插入、删除或更新的行。
您可以定义自己的策略以刷新 MANUAL REFRESH 文本索引。在下面的示例中,使用以参数形式传递的刷新间隔,以及与用于 AUTO REFRESH 文本索引的规则相类似的规则来刷新所有 MANUAL REFRESH 文本索引。
CREATE PROCEDURE refresh_manual_text_indexes( refresh_interval UNSIGNED INT ) BEGIN FOR lp1 AS c1 CURSOR FOR SELECT ts.* FROM SYS.SYSTEXTIDX ti JOIN sa_text_index_stats( ) ts ON ( ts.index_id = ti.index_id ) WHERE ti.refresh_type = 1 -- manual refresh indexes only DO BEGIN IF last_refresh IS null OR cast(pending_length as float) / ( IF doc_length=0 THEN NULL ELSE doc_length ENDIF) > 0.2 OR DATEDIFF( MINUTE, CURRENT TIMESTAMP, last_refresh ) > refresh_interval THEN EXECUTE IMMEDIATE 'REFRESH TEXT INDEX ' || text-index-name || ' ON "' || table-owner || '"."' || table-name || '"'; END IF; END; END FOR; END; |
您可以随时使用 sa_text_index_stats 系统过程决定是否需要刷新,以及刷新应该是完整重建还是增量更新。
MANUAL REFRESH 文本索引在创建时不包含数据,仅当对其进行刷新后才可用。要刷新 MANUAL REFRESH 文本索引,请使用 REFRESH TEXT INDEX 语句。
MANUAL REFRESH 文本索引在重装过程中不会进行刷新,除非为 dbunload 指定 -g 选项。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |