使用搜索优化表¶
搜索优化通常对用户公开透明。查询的工作原理是一样的,只是有些查询速度更快。但是,请务必注意其他表操作对搜索优化服务可能产生的影响,或是搜索优化服务对其他表操作可能产生的影响。
修改表¶
如果更改了列的默认值,搜索访问路径会失效。
要在搜索访问路径失效后再次使用搜索优化,必须 弃用 SEARCH OPTIMIZATION 属性 并 将 SEARCH OPTIMIZATION 属性 添加回表中。
如果添加、弃用或重命名列,搜索访问路径仍然有效:
如果为整个表启用了搜索优化,而没有指定特定列,那么在表中添加列时,新列会自动添加到搜索访问路径中。但是,如果在为列启用搜索优化时使用了 ON 子句,则不会自动添加新列。
从表中弃用列时,弃用的列将自动从搜索访问路径中移除。
重新命名列不需要更改搜索访问路径。
如果弃用,则也会删除 SEARCH OPTIMIZATION 属性和搜索访问路径。请注意:
取消弃用表后,搜索优化会立即重新成为表的属性。
弃用表后,搜索访问路径的数据保留期与表中的数据保留期相同。
如果从表中 弃用 SEARCH OPTIMIZATION 属性,就会移除搜索访问路径。将 SEARCH OPTIMIZATION 属性添加回表 时,维护服务需要重新创建搜索访问路径。(无法取消弃用该属性。)
克隆表、架构或数据库¶
如果克隆表、架构或数据库,还会克隆每个表的 SEARCH OPTIMIZATION 属性和搜索访问路径。克隆表、架构或数据库会为每个表及其相应的搜索访问路径创建 零拷贝克隆。但是,如果在创建克隆时表的搜索访问路径已过期,则原始表和克隆表都需要支付搜索优化服务产生的维护费用,用于更新搜索访问路径。
如果 DML 操作在克隆操作之前显著修改了表,则搜索访问路径可能已过期。例如,如果 INSERT 语句导致原始表的大小大幅增加,则需要维护搜索访问路径才能反映此更改。
要避免或尽量减少克隆表上的搜索优化维护任务的成本,请执行以下一个或两个步骤:
如果需要在克隆表上保持搜索优化启用状态,请先验证搜索访问路径是否为最新,然后 再执行 CREATE TABLE ...CLONE 语句。如果未设置,请跳到下一步。
在大多数情况下,您可以执行 SHOW TABLES 语句并检查 SEARCH_OPTIMIZATION_PROGRESS 列中的值。如果列的值为
100
,则搜索访问路径为最新。但是,如果要压缩搜索访问路径来移除与已删除的源表数据有关的信息,则可能需要进行维护。在创建克隆后立即禁用克隆表上的搜索优化服务。例如,要禁用
t1
表上的搜索优化服务,请执行以下语句:ALTER TABLE t1 DROP SEARCH OPTIMIZATION;
有关更多信息,请参阅 ALTER TABLE 主题中的 搜索优化操作 (searchOptimizationAction)。
如果使用 CREATE TABLE ...LIKE 创建与原始表具有相同列的新空表,则 SEARCH OPTIMIZATION 属性不会复制到新表。
使用辅助数据库中的表(支持 Database Replication)¶
如果主数据库中的表启用了 SEARCH OPTIMIZATION 属性,则该属性将复制到辅助数据库中的相应表。
辅助数据库中的搜索访问路径不会复制,而是会自动重建。请注意,此过程会产生与 搜索优化成本估算和管理 中所述相同类型的成本。
掩码策略和行访问策略¶
搜索优化服务与使用掩码策略和行访问策略的表完全兼容。
但是,启用搜索优化后,因掩码策略或行访问策略而无法查看值的用户可能可以更确定地推断该值是否存在。无论是咨进行搜察优化,查询廷迟的差异都可以提供有关是否存在受策略限制的数据的提示,这可能会构成安全问题,具体取决于数据的敏感性。这种效果可以通过搜索优化来放大,因为它可以使不返回结果的查询变得更快。
例如,假设行访问策略阻止用户访问带有 country = 'US'
的行,但数据不包括带有 country = 'US'
的行。现在,假设为 country
列启用了搜索优化,并且用户使用 WHERE country = 'US'
运行查询。查询按预期返回空结果,但使用搜索优化的查询的运行速度可能比不使用优化查询时快。在这种情况下,用户可以根据运行查询所花费的时间,更容易地推断出数据不包含任何 country = 'US'
行。