结构化查询语言 (SQL) 是用于查询关系数据库的语言。典型的关系数据库由表组成,其中每个表都有行和列。每列都有特定类型的数据。取决于 SQL 查询复杂性的因素。
例子 –
select *
from employee
where id = 77
查询可以通过三种不同的方式找到结果 –
- O(1) — id 上的哈希索引,或上次查询的 id = 77 上的缓存结果。
- O(n) – 做一次全面扫描并查看每一行,但找不到任何结果。
- 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)
- 选择 * 要避免,尤其是当您将联接作为至少一列两次时,这会浪费服务器、数据库和网络资源。
- 理解聚合不再考虑循环。
聚合如 – count 、 avg等。