我有一个关于数据库性能的简单问题。
我有一个包含两列的表
id (int) - string (varchar)
是否有理由对这两列(或其中任何一列)进行索引?
我使用该表进行计数搜索:
SELECT count(*)
FROM TablaName
WHERE id = 'someInt' AND string = 'someString'
如果返回计数> 0
什么都不做
否则
在表格中插入新行。
该表有大约200,000行,每天增加1000左右。
我认为,索引此表的方式将创建完全相同的索引表,因为每次都要查询这两列。因此索引是不必要的。
有什么想法吗?
由于
答案 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
上定义一个唯一约束,并检查插入中的错误。