📜  SQL 查询复杂性

📅  最后修改于: 2021-09-10 01:58:34             🧑  作者: Mango

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

例子 –

select * 
from employee 
where id = 77

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

  1. O(1) — id 上的哈希索引,或上次查询的 id = 77 上的缓存结果。
  2. O(n) – 做一次全面扫描并查看每一行,但找不到任何结果。
  3. O(log(n)) – 对 id 进行排序并进行二分查找。

查询的复杂性完全取决于 SQL 引擎将如何处理查询。如果我们的employee表有100000000000行数据,我们需要找出employee id为77的那一行。如果我们扫描整个表,那么需要很长时间。如果我们对表进行排序并对该表进行二分搜索,那么我们需要大约 36 次查找(100000000000 的对数基数 2 是 ~36)才能找到我们的值。但是对表格进行排序需要一段时间。这完全取决于 sql 引擎的优化器。

如果您想了解有关 SQL 引擎查询处理的更多信息,我会推荐这个。

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

  • 限制你的结果——
    当您无法避免过滤您的 select 语句时,您可以考虑限制您的结果。您可以使用 limit, top 来限制结果

    例子 –

    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等。