1

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

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

我可以定义两个索引:1) on columnEmployees.ID2) on column Order.EmployeeID。如果我只想拥有一个索引,我应该为更快的连接定义哪一个?

我正在为 Android 使用 SQLite

4

1 回答 1

2

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

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

假设它Employees.ID是主键的候选对象Employees(即值是唯一的),它应该被定义为主键。这就像一个索引。

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

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

编辑:

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

您可以按顺序读取任一表并在另一个表中查找值。顺序读取表比随机读取(通过索引查找)更快。在较大的表上进行顺序读取会更快,大概是orders在较小的表上进行索引查找,大概是employees.

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

于 2013-09-07T12:12:08.707 回答