2011-06-21 42 views
1

我设置了一个sqlite数据库,它将监视多个物理传感器。一个单独的应用程序将数据保存数月...此应用程序将只监视数据采集。我想确保我的查询尽可能高效。哪个更快? ORDER BY时间戳或WHERE时间戳=

我想从传感器中拉出最后几个读数。将会有大约20种不同类型的传感器,每种都有不同的传感器ID。

这只是为了监控目的,所以它不必精确捕获所有数据,只显示最近的值。

哪个会更快?为什么?

sqlCommString = "SELECT * FROM Samples WHERE Timestamp = '" + DateTime10SecondsAgo + "' 

sqlCommString = "SELECT * FROM Samples ORDER BY Timestamp DESC LIMIT 20" 
+1

难道你不想'时间戳> = ...'?另外,你为什么不试试并找出哪一个更快? –

+0

我做了Timestamp平等,因为传感器每秒都会读取一次,所以我总是会在10秒后收集一整套读数,而不是在读数之间。但是,不妨>>。谢谢。将测试。 – drinck

回答

5

这是可能是第一个(尽管它应该是>=而非=得到最后几样)会更快。

第二个具有检索所有行,然后对其进行排序(虽然指数将使排序不必要的,而且你很应该指标,对于这种使用情况列),然后抛出一些了。

第一个只检索那些需要的。

一般来说,尽可能快地减少数据集的大小会更有效(有一天可以查看基数,如果您遇到这种情况,这是一个令人着迷的概念)。

但是,正如所有的优化,措施,不要猜测!特别是对于查询本身只有一个数据库的部分性能公式 - 数据的构成也可以产生重大影响。