gpt4 book ai didi

sql - 如何创建SQL索引以加快连接速度?

转载 作者:行者123 更新时间:2023-12-03 18:56:37 26 4
gpt4 key购买 nike

我有以下查询,其中没有where子句,用于获取所有雇员及其订单的列表:

SELECT LastName, FirstName, OrderID, OrderDate
FROM Employees inner JOIN Orders
ON Employees.ID = Order.EmployeeID


我可以定义两个索引:1)在 Employees.ID列上和2)在 Order.EmployeeID列上。如果我只想拥有一个索引,那么我应该为快速连接定义哪个索引?

我正在将SQLite用于Android

最佳答案

您的查询遗漏了许多细节,例如表的大小和结构。但是,根据实体的名称,我可以推测一些细节。

首先,在SQLite中,每个表都被赋予一个主键。您应该通过在每个表上定义一个主键来利用这一点。

假设Employees.IDEmployees上主键的候选者(即,值是唯一的),则应将其定义为主键。这就像一个索引。

通过这种结构,引擎应通过读取Orders表并在Employees表中查找值来处理查询。假定Orders表大于Employees,我认为这将是满足查询的最有效方法。

换句话说,只需确保Employees.ID是主键。

编辑:

您需要阅读两个表。基本上有三种选择。您可以对两个表进行排序,然后合并它们。这是昂贵的,因为分类是昂贵的。

您可以顺序读取任何一个表,并在另一个表中查找值。顺序读取表比进行随机读取(通过索引查找)要快。在较大的表(可能是orders)上进行顺序读取的速度更快,而在较小的表(可能是employees)上进行索引查找则更快。

如果orders表非常宽(很多列),则orders(id, orderdate)上的索引可能会有所改善。这是一个“覆盖”索引,因此不需要访问原始数据。

关于sql - 如何创建SQL索引以加快连接速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18673121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com