专业化管理 > 配置您的 Windchill 环境 > 使用子字符串索引优化前导和尾随通配符查询
  
使用子字符串索引优化前导和尾随通配符查询
子字符串是包含前导和尾随通配符的字符串,如 *ABC*。包含子字符串条件的查询与以通配符结尾的字符串的查询 (如 ABC*) 相比,运行时间明显更长。标准数据库索引不能有效地执行含有子字符串条件的查询。
标准数据库索引就像一个带有按姓氏分类的条目的电话目录。如果您知道确切的名字,或者甚至姓氏的前几个字母,即可快速而高效地找到特定的条目。但如果您要搜索姓氏中出现的一串字母,则必须浏览各个单独的条目。您知道的字母是由组成姓名的字母构成的完整字符串的子字符串。正如同电话目录一样,如果不知道字符串的前导字符,标准数据库索引就无用。
可以创建其他数据库架构对象来支持这些查询类型的有效执行,并优化最终用户查询的响应时间。这些附加数据库架构对象称为子字符串索引。可以为使用子字符串条件查询的各个字符串属性创建子字符串索引。创建子字符串索引可以提高包含子字符串的查询的性能。本质而言,子字符串索引会获取电话目录中的各个条目,并将每个姓氏的一小部分作为单独的索引条目进行存储。当只提供几个字符时,系统可以借此有效地查找条目。
何时使用子字符串索引
管理员可以使用 SQL 监控工具 (如 TopSQL MBean) 来找出花费过多时间或系统资源的查询。这些查询可能会受益于子字符串索引。例如,您可能会观察到有大量关于部件的搜索,并且用户通常搜索部件名称或者数目的子字符串。用户可能还会警告管理员或 IT,带有前导通配符的搜索将比其他搜索花费更长的时间。
在您找出子字符串条件搜索中通常所涉及的属性后,便可以创建子字符串索引,进而更有效地执行搜索。
请注意其他子字符串模式对象需要系统存储空间,其维护需要系统进程资源。这意味着子字符串索引也许并不适合每个字符串属性。额外系统资源和最终用户响应时间难以兼顾。
创建子字符串索引
要创建子字符串索引,您必须:
1. 在子字符串索引配置文件中定义子字符串
2. 运行子字符串索引工具创建子字符串索引模式对象
3. 确保系统配置使子字符串索引与系统数据同步
向您的用户传达的内容
使用子字符串索引时,查询为使子字符串到达一定数量而进行优化。这个数量是在配置文件中所指定的 indexLengthjoinLimit 属性的共同产物。例如,如果您的 indexLength 是 4 并且 joinLimit 是 3,如果指定的字符数目是 12 或者更小,那么子字符串查询便有最优性能。这个最优字符数量应该传达给您的用户。如果用户输入的字符数超过 indexLengthjoinLimit 属性所确定的数目,那么查询仍然工作,但性能未优化。在查询条件中指定的字符越多,结果集便越精确。如果搜索条件普遍超过优化字符数目,并且用户报告查询性能不佳,应考虑增加 indexLength