我正在设置一个sqlite数据库,该数据库将监视多个物理传感器。一个单独的应用程序保存了几个月的数据...此应用程序将仅监控该数据采集。我想确保我的查询尽可能高效。
我想从感应器上提取最后几个读数。大约有20种不同类型的传感器,每种都有不同的传感器ID。
这只是为了监视目的,所以它不必精确地捕获所有数据,只需显示最近的值。
其中哪一个会更快?为什么?
sqlCommString = "SELECT * FROM Samples WHERE Timestamp = '" + DateTime10SecondsAgo + "'
sqlCommString = "SELECT * FROM Samples ORDER BY Timestamp DESC LIMIT 20"发布于 2011-06-21 10:43:22
第一个可能会更快(尽管获取最后几个样本应该是>=而不是= )。
第二个方法必须检索所有行,然后对它们进行排序(尽管索引将使排序变得不必要,在此用例中,您非常应该为该列建立索引),然后丢弃一些行。
第一个只检索需要的那些。
一般来说,尽可能快地减少数据集的大小会更有效率(有朝一日可以看看基数,如果你喜欢这种东西,这是一个很有趣的概念)。
但是,和所有的优化一样,测量,不要猜测!特别是在数据库中,查询本身只是性能方程的一部分-数据的构成也会产生重大影响。
https://stackoverflow.com/questions/6419759
复制相似问题