我正在设置一个sqlite数据库,它将监控许多物理传感器。一个单独的应用程序正在保存数月的数据......该应用程序将仅监控数据采集。我想确保我的查询尽可能高效。
我想从传感器中提取最后几个读数。将有大约20种不同类型的传感器,每种传感器具有不同的传感器ID。
这仅用于监控目的,因此不必精确捕获所有数据,只显示最近的值。
其中哪一项会更快?为什么呢?
sqlCommString = "SELECT * FROM Samples WHERE Timestamp = '" + DateTime10SecondsAgo + "'
sqlCommString = "SELECT * FROM Samples ORDER BY Timestamp DESC LIMIT 20"
答案 0 :(得分:5)
可能第一个(虽然它应该是>=
而不是=
来获取最后几个样本)会更快。
第二个必须检索所有行,然后对它们进行排序(尽管索引会使排序变得不必要,而且你应索引该列用于此用途case)然后扔掉一些。
第一个只检索那些需要的东西。
一般来说,尽可能快地缩小数据集的大小会更有效率(有一天看一下基数,如果你遇到这种情况,这是一个很有吸引力的概念)。
但是,与所有优化一样,度量,不要猜测!特别是对于数据库,其中查询本身只是一个性能方程式的一部分 - 构成数据也会产生重大影响。