sql - 多列索引 - 仅对一列进行查询时可以吗?

标签 sql oracle indexing

如果我有一张 table

create table sv ( id integer, data text )

和一个索引:
create index myindex_idx on sv (id,text)

如果我进行查询,这仍然有用吗
select * from sv where id = 10

我询问的原因是我正在查看一组没有任何索引的表,并看到了选择查询的不同组合。有些只使用一列,其他的不止一列。我是否需要为两个集合都有索引,还是一个全包索引可以?
我正在添加索引以实现比全表扫描更快的查找。

示例(基于 Matt Huggins 的回答):
select * from table where col1 = 10
select * from table where col1 = 10 and col2=12
select * from table where col1 = 10 and col2=12 and col3 = 16

都可以被索引表 (co1l1,col2,col3) 覆盖,但是
select * from table where col2=12

需要另一个索引吗?

最佳答案

它应该很有用,因为 (id, text) 上的索引首先按 id 索引,然后分别按文本索引。

  • 如果按 id 查询,将使用此索引。
  • 如果您按 id & text 查询,将使用此索引。
  • 如果您按文本查询,则不会使用此索引。

  • 编辑:当我说它“有用”时,我的意思是它在查询速度/优化方面很有用。正如 Sune Rievers 指出的那样,这并不意味着您将获得仅给定 ID 的唯一记录(除非您在表定义中指定 ID 为唯一记录)。

    关于sql - 多列索引 - 仅对一列进行查询时可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1865423/

    相关文章:

    sql - 在一个 SQL 查询中加入两个 COUNT()

    SQL 替换智能引号

    c# - 带有自定义字段名称的 RavenDB 查询索引

    indexing - 在大型数据库中搜索(非常)近似子串

    mysql - PHP/Mysql 如何将另一个表加入到搜索查询的匹配中

    sql - 数据库会读但不会写

    MYSQL查询: query displays the second to last line of data

    sql - 将文件插入 Postgres 数据库

    java - org.hibernate.HibernateException : Unable to access lob stream

    python - Pandas 按列值拆分 DataFrame