2016-02-19 115 views
0

我有几个列的Postgres的表,一列,列最后更新日期时间。我的查询是获取开始和结束时间之间的所有更新行。这是我对此查询的理解,在此查询中使用WHERE而不是BETWEEN。基本查询如下:SQL索引优化WHERE查询

SELECT * FROM contact_tbl contact 
WHERE contact."UpdateTime" >= '20150610' and contact."UpdateTime" < '20150618' 

我是新创建SQL查询,我相信这个查询是做一个全表扫描。如果可能,我想优化它。我在UpdateTime列上放置了一个Normal索引,这需要很长时间才能创建,但使用此索引查询速度更快。我不确定的一件事是,如果表格变得更大/列更改,必须重新计算此索引。另外,我正在考虑UpdateTime行上的CLUSTERED索引,但是我想问一下如果我有一个优化这个/如果我是在正确的轨道上的优化方法

回答

1

在UpdateTime上放置索引是正确的。它将允许使用索引而不是全表扫描。

2 WHERE使用BETWEEN关键字像上面与条件是完全相同的: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between

BETWEEN只是“语法糖”为那些类似的语法更好。

指标允许更快的读取速度,但减慢写入(因为像你提到,新的数据必须被插入索引为好)。整个索引不需要重新计算。索引是智能数据结构,因此可以添加额外的数据,而无需额外的工作,但确实需要一些。

你可能会做更多的读比写,所以使用索引是一个好主意。

如果你正在做大量的写入和读取数,那么你要考虑多一点了。这会降低业务需求。尽管总体吞吐量可能会减慢,但读取延迟可能不是要求,但写入延迟可能是,在这种情况下,您不需要索引。

例如,认为这张彩票例子:每次有人买了票,你要录制他们的姓名和准考证号。然而,唯一一次你必须阅读这些数据,是在唯一的绘图之后,看看谁有这个票号。在这个数据库中,你不想索引票号,因为他们会写很多,读数也很少。

+0

感谢您的详细和快速回复。你怎么看待在这里使用CLUSTERED索引?是否有更多的工作/成本涉及新的数据插入使用一个与正常的一个? – user1077071