0
比方说,我有这样的数据,例如:SQL - 外键O(1)的时间复杂度是多少?
User:
-id
-name
Comment:
-id
-user id (FK)
-content
所以,当我查询数据库找到谁是相关的评论的用户,它经过所有的行中的用户,直到它用正确的id(O(n))找到一个用户?
或者它像某种散列表一样被索引,并且DB立即知道在哪里找到用户(O(1))?
UPDATE: OK显然我需要改写:这是可能使这个O(1)用适当的索引?
SQL是一个规范。您的问题的答案可能会也可能会在每个实现之间有所不同。查询优化器使用索引在列可用时加速列匹配。 – scottb
时间复杂度用于度量算法的效率。由于您没有在DBMS中使用源代码,并且实现方式各不相同,因此不可能对其效率进行大的O度量。如果您适当地使用索引,通常可以要求DBMS使用EXPLAIN PLAN或其等效数据库在DBMS中为您提供有关效率的信息。 –
您需要指定您要查询的rdbms。索引通常用B树实现,这意味着O(log n),尽管它[看起来像](https://msdn.microsoft.com/en-us/library/dn133190.aspx)SQL Server内存表可以有散列表索引。也可能有其他的实现也使用它们。 – Blorgbeard