对索引进行分段,通常可以提高文本搜索的性能,尤其是在多处理器计算机上。然而,不合适的分段索引可能会降低某些查询的性能。仔细考虑分段如何影响您的数据和查询。
对于所有数据库和索引方法而言,将文本数据和 etx 索引散布到多个磁盘驱动器上可以提高性能。在提供有足够的磁盘驱动器的情况下,通过使用基于表达式的分段或循环分段将表数据散布到多个数据库空间或智能大对象空间上也很有用。
基于表达式的分段是实现更小索引分段的最佳机制,因为每个索引分段都充当一个孤立的索引,并且只带来与该分段的大小成比例的打开开销。不要针对索引使用循环分段,因为它可能导致性能比根本没有分段时还差。
文本搜索是通过 etx_contains() 运算符来执行的,该运算符作为索引扫描来执行。降低索引扫描开销的关键在于,使用选择性搜索条件以减少通过索引扫描选择的行数,或者缩小所读取的索引分段的大小。
CREATE TABLE recipes ( id INTEGER, recipe CLOB, meal_type CHAR(1), ingredients LVARCHAR );
CREATE INDEX recipes_idx ON recipes (recipe etx_clob_ops) USING etx (PHRASE_SUPPORT = 'MAXIMUM') FRAGMENT BY EXPRESSION meal_type = 'B' in sbsp1, meal_type = 'L' in sbsp2, meal_type = 'D' in sbsp3;
SELECT id FROM recipes WHERE etx_contains ( recipe, 'zucchini') AND meal_type = 'D';
这立刻消除对使用分段的考虑,从而使查询执行更快。
此外,请考虑在用户更新数据时分段对查询性能和并行度的影响。您希望尽快地锁定索引。在写入某个智能大对象时,GBase 8s 会对该对象执行互斥写锁定操作。由于文本索引存储在智能大对象中,所以在更新每个索引分段时会对它执行互斥锁定操作。
最多可将索引分段为 6 个分段。尝试调整具体的 DBMS 可确定适合您数据的最佳索引分段数。
过多的索引分段可能会降低某些情况下的性能。例如,如果将索引分段为很多个分段并且查询要从每个分段检索信息,那么该查询的总体性能可能比根本没有对索引进行分段时还差。