什么是大O的SQL选择,与表n
行的,我想回到m
的结果?
而什么是大澳的一个Update
,或delete
,或Create
操作?
我说的是一般的MySQL和SQLite。
什么是大O的SQL选择,与表n
行的,我想回到m
的结果?
而什么是大澳的一个Update
,或delete
,或Create
操作?
我说的是一般的MySQL和SQLite。
当你不控制选择的算法,有没有办法直接了解。 然而,如果没有索引的选择应该是O(N)(表扫描,有权检查每一条记录,这意味着它会随着表的大小比例)。
带索引的SELECT可能是O(日志(n))的(虽然这将取决于用于索引算法和数据本身的属性,如果对任何真正的表也是如此)。 要确定您的结果任何表或查询你不得不求助于剖析现实世界的数据是肯定的。
没有索引的INSERT应该是非常快比让你有选择(接近O(1)),而更新需要找到记录第一,所以会慢一些(略)。
使用索引INSERT将可能再次在O3球场(的log(n ^ 2))当索引树需要重新平衡,更接近O(日志(n))的除外。 如果它影响索引行,在SELECT费用的顶部同样放缓将通过更新发生。
所有的赌注都关闭,一旦你在谈论混合JOIN:你将不得不配置文件,并使用你的数据库的查询估算工具,以获得一读。 还要注意的是,如果该查询的性能很关键,你应该重新轮廓不时为您的查询优化器使用的算法将作为数据负载的变化而变化。
另一件事要记住......大O不会告诉你每笔交易的固定费用。 对于较小的表,这些可能比实际工作的成本较高。 作为一个例子:设置,拆除和用于单排的横网络查询的通信费用自然比索引记录在小表查找更多。
正因为如此,我发现能够捆绑一组相关查询的一个批次中可以有对性能比任何优化我没有到数据库正确得多的影响。
我认为真正的答案只能在个案基础(数据库引擎,表设计,索引等)的情况来确定。
但是,如果你是一个MS SQL Server用户,您可以在查询分析器(2000)或管理工作室(2005+)估计执行计划熟悉。 这就给了你很多,你可以使用分析信息。
一切都取决于你如何(以及)编写SQL和如何以及你的数据库是专门为您正在执行的操作。 尝试使用解释计划功能,看看事情会由DB执行。 的。 你可以计算出大O