gpt4 book ai didi

sql - oracle 在有条件的列长度上创建索引

转载 作者:行者123 更新时间:2023-12-04 07:44:46 25 4
gpt4 key购买 nike

我有一个列名 imsi并且列的长度应为 15字符,我们可以根据条件列的长度创建索引吗
我已经在 length(imsi) 上创建了一个索引,但我想要所有记录,其中 length(imsi)<>15 ,但查询时间很长,至于 length(imsi)<15以毫秒为单位给出输出。
但我想要输出 where length(imsi) <> 15

select * from msisdn_data where length(imsi)<> 15
或者
select * from customer_data where length(imsi)>15 or length(imsi)<15 
两个查询都需要很长时间

最佳答案

尝试

ALTER SESSION SET QUERY_REWRITE_INTEGRITY = TRUSTED; 
ALTER SESSION SET QUERY_REWRITE_ENABLED = TRUE;
  • 索引表达式中调用的函数必须是确定性的。这意味着对于相同的输入,函数总是
    返回相同的结果。
  • 查询优化器可以使用基于函数的索引进行基于成本的优化,而不是基于规则的优化。因此,在您通过调用 DBMS_STATS.GATHER_TABLE_STATS 或 DBMS_STATS.GATHER_SCHEMA_STATS 分析索引本身之前,它不会使用基于函数的索引。

  • 或者你可以使用提示。
    SELECT /*+ index(msisdn_data imsi_idx) */ * 
    FROM msisdn_data WHERE LENGTH(imsi) <> 15;
    有关为何不在查询中使用基于函数的索引的更多信息,请参阅链接
    http://www.dba-oracle.com/t_statistics_function_based_index.htm

    关于sql - oracle 在有条件的列长度上创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67249841/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com