【问题标题】:Which columns should be indexed and why? [closed]哪些列应该被索引,为什么? [关闭]
【发布时间】:2016-06-25 05:12:18
【问题描述】:

给定一个有四列的表格

create table user 
(
    id int primary key,
    username varchar(100),
    age int,
    country varchar(100)
);

最常见的查询是基于用户名、年龄和国家/地区的 where 子句。例如:

select * 
from user 
where username = "Join Smith" and age > 18 and country = "UK"

如何建立最有效的索引,为什么?

如果查询变为

select * 
from user 
where username like "John Smith" and age = 18 and country = "UK"

我将对所有三列用户名、年龄和国家/地区使用复合索引。但我不知道这对哪种情况最有效。请帮忙。

【问题讨论】:

  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或其他完全不同的东西。

标签: database indexing


【解决方案1】:

在以下列顺序国家、年龄创建索引 因为在这两个查询中,国家/地区将是完全匹配的,如果它在索引中的第一列,它将过滤掉结果 将年龄添加为索引中的第二列,它将执行完全匹配或范围查询

【讨论】:

    【解决方案2】:

    始终建议让您的 id(作为主键,通常是最左边的列)与可用列不同,并保持此编辑 = False。

    现在这样做,我认为执行上述任何一个查询都不会有任何问题。

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 2012-10-25
      • 2013-02-26
      • 2012-07-10
      • 1970-01-01
      • 2010-09-23
      相关资源
      最近更新 更多