📜  SQL查询复杂度

📅  最后修改于: 2021-08-24 04:39:05             🧑  作者: Mango

结构化查询语言(SQL)是用于查询关系数据库的语言。典型的关系数据库由表组成,其中每个表都有行和列。每列都有特定类型的数据。因素取决于SQL查询的复杂性。

例子 –

select * 
from employee 
where id = 77

查询可以通过三种不同的方式找到结果–

  1. O(1) -ID上的哈希索引,或者来自先前查询的ID = 77上的缓存结果。
  2. O(n) –进行全面扫描,查看每一行,但未找到任何结果。
  3. O(log(n)) –对ID进行排序并进行二进制搜索。

查询的复杂性完全取决于SQL引擎将如何处理查询。如果我们的雇员表中有1000亿行数据,而我们需要找出雇员ID为77的行。如果我们扫描整个表,则将花费很长时间。如果我们对表进行排序并在该表上进行二进制搜索,则大约需要进行36次查找(100000000000的日志基数2为〜36)才能找到我们的值。但是对表进行排序将需要一段时间。它完全取决于sql引擎的优化程序。

如果您想了解有关SQL引擎查询处理的更多信息,我建议您这样做。

编写良好的查询时要记住的事情:

  • 限制您的结果–
    当您无法避免过滤选择语句时,可以考虑限制结果。您可以通过使用限制来限制结果,顶部

    例子 –

    select TOP 3 
    from employee
    select * 
    from employee limit 10
  • 不要使查询变得更复杂。尝试使它们简单有效。

    例子 –
    考虑以下查询:

    select * 
    from employee 
    where id = 77 or id = 85 or id = 69

    因此,您可以使用IN替换运算符

    select * 
    from employee 
    where id in (77, 85, 69)
  • 选择*可以避免这种情况,特别是当您至少有两次作为至少一列的联接而浪费了服务器,数据库和网络资源时。
  • 了解集合体不再考虑循环。
    总计-– countavg等。