我对MySQL查询的复杂性(Big O表示法)很感兴趣,例如“SELECT something WHERE id = 1”。我不只是谈论一个例子,而是一些文档,我可以阅读所有这些东西,MySQL如何实现这些查询。有吗?如果你分享这个,我真的很感激。
答案 0 :(得分:4)
我将问你的问题:MySQL中以下查询的时间复杂度是多少?
SELECT something
FROM t
WHERE id = 1;
基本上有两种可能性:O(log(n))和O(n)。如果数据库的索引位于id
,则查找为O(log(n))。因为索引存储在内存中,并且表大小通常在万亿行之下,所以这通常近似为O(1)。读取索引和设置查询的“常量”组件占据了浏览索引的时间。
另一种可能性是O(n)。这意味着需要读取每一行以找到具有正确id的行。您根本没有limit
,因此即使第一行符合条件,也需要读取每一行。
你可以想象,如果这样一个简单的查询有三个潜在的“正确”答案,那么更复杂的查询就更难以分析。如果您真的想了解性能,您需要了解复杂性理论,数据库实现的算法,以及内存和内存不足数据对算法的影响。