gpt4 book ai didi

sql - Postgres 中多个 varchar 列的最佳索引策略

转载 作者:行者123 更新时间:2023-11-29 11:33:07 25 4
gpt4 key购买 nike

我有一个包含 10 列的表格需要进行搜索(表格本身大约有 20 列)。因此,用户将至少为其中一列输入查询条件,但可能全部十列。然后将所有非空条件放入 AND 条件

假设用户为 column1 和 column4 以及 column8 提供了非空条件,查询将是:

select * from the_table 
where column1 like '%column1_query%'
and column4 like '%column4_query%'
and column8 like '%column8_query%'

所以我的问题是:创建 1 个包含 10 列的索引是否更好? 10 个索引,每个索引 1 列?或者我是否需要找出经常一起查询哪些列集并为它们创建索引(在上述情况下为 cols 1,4 和 8 建立索引)。

如果我的理解是正确的,那么只有当所有 10 列都符合条件时,10 列的单个索引才会有效。

接受此处的任何建议,此外,表格的行数预计仅为 20-30K 行左右,但我想确保表格上的任何和所有搜索都是快速的。

谢谢!

最佳答案

  1. “找出哪些列集经常一起查询并为它们创建索引”是最好的方法。

    此外,根据 2 个标准对索引中的列进行排序:

    • where子句中出现频率高的列优先

    • 更具选择性的列具有优先权。

      例如如果“where col1=val1”为随机值 val1 平均返回 2 行,但“where col2=val2”平均返回 2000 行,则 col1 应该优先于索引的早期

  2. 不确定 Postgres,但在 Sybase 中,like '%xxx%' 表达式(例如匹配值以通配符开头)永远不会命中索引。因此,除非您选择这 3 列并使其成为覆盖索引,否则该索引无法帮助该查询。

关于sql - Postgres 中多个 varchar 列的最佳索引策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2792295/

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