【问题标题】:indexing expressions in sqlsql中的索引表达式
【发布时间】:2010-09-21 17:30:25
【问题描述】:

我有一个数据库,其中一个常见查询是“blobCol 为空”,我认为这会导致性能变差(如在全表扫描中)。我不需要索引 blobCol 的内容。

哪些索引可以改善这一点?索引可以建立在表达式(blobCol 不为空)而不是列上吗?

【问题讨论】:

    标签: sql indexing


    【解决方案1】:

    是的,大多数 DBMS 都支持它,例如在 PostgreSQL 它是

    CREATE INDEX notNullblob ON myTable (blobCol is not NULL);
    

    似乎您在 SQL Server 上可以做的最好的事情是创建一个 computed column,例如,如果 blob 为 null,则包含 1,否则为 0,并在其上创建索引。

    【讨论】:

    • 不确定,但我认为不会
    • MySQL 似乎不支持这个。 OTOH 前缀长度为 1 的索引效果很好。
    【解决方案2】:

    一些数据库允许对表达式进行索引,但普通索引应该会显着减少查询的运行时间。

    【讨论】:

    • 我担心的是,当我想要的只是是否有任何数据时,一个普通的旧索引会占用大量索引数据的资源。
    • 这是一个公平的观点,正如我所提到的,一些数据库支持表达式索引,但我不知道你的是否是其中之一,因为你没有指定你正在使用的数据库。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2015-11-06
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多