在Sql中 - 我应该索引一个两列表,当每列都被索引时?

时间:2014-11-18 19:17:28

标签: sql database database-design

我有一个关于数据库性能的简单问题。

我有一个包含两列的表

id (int) - string (varchar)

是否有理由对这两列(或其中任何一列)进行索引?

我使用该表进行计数搜索:

 SELECT count(*)  
 FROM TablaName 
 WHERE id = 'someInt' AND string = 'someString'

如果返回计数> 0

什么都不做

否则

在表格中插入新行。

该表有大约200,000行,每天增加1000左右。

我认为,索引此表的方式将创建完全相同的索引表,因为每次都要查询这两列。因此索引是不必要的。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

对于诸如唯一索引和文本索引之类的某些异常,索引对于功能而言是必需的。这是非常理想的表现。

如果您希望在此类查询中获得最佳性能,则需要在两列上都有一个复合索引:id, string

如果id是唯一的(或声明为主键),那么索引的影响可以忽略不计,a你可能不会想要它。

但是,由于竞争条件,您的查询结构是可疑的。你或许可以逃脱:

insert into table(. . .)
    select <values>
    where not exists (select 1 from TablaName where id = 'someInt' and string = 'someString');

(注意:某些数据库可能需要from子句,类似于from dual。)

即使这可能在某些数据库中存在竞争条件。要真正保护表,您应该在id, string上定义一个唯一约束,并检查插入中的错误。