哪些列应编入索引?为什么?

时间:2016-06-25 05:12:18

标签: database indexing

给出一个包含四列的表

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"

我会在所有三列用户名,年龄和国家/地区使用复合索引。但我不知道这对于哪种情况来说这是否最有效。请帮忙。

2 个答案:

答案 0 :(得分:0)

始终建议将您的ID(作为主键,通常是最左侧列)与可用列保持不同,保持此edit = False。

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

答案 1 :(得分:0)

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