索引字段和"按顺序排列"在另一个领域

时间:2015-03-25 13:25:48

标签: sql indexing sql-order-by database-performance

假设我有一个包含三列的小型数据库:" id1"," id2"和"日期"。 我正在我的数据库索引" id1"因为它是一个经常被选中的字段(许多选择查询是用ex:where" id1" = 125548)运行的。

在我的某些特定查询中,我需要根据日期"对用户的记录进行排序。表中没有索引的字段。我的好奇心是,日期字段上的排序操作(基本上是按订单操作)将在整个数据库上运行,还是仅在用户的行(例如:125548)上运行,我根据&#34选择; ID1"领域。

以下是一个示例查询:

SELECT u 
FROM UserView u 
WHERE u.viewedId=:viewedId AND u.viewDate >=:dateLimit 
ORDER BY u.viewDate DESC

1 个答案:

答案 0 :(得分:0)

首先,您可以创建一个可以同时执行这两个操作的索引,假设您的查询非常简单:

select . . 
from table t
where id1 = X
order by col2

table(id1, col2)上的综合索引可用于whereorder by

至于你的问题。通常,首先进行过滤。可能有一些数据库会查看表的统计信息并说“gosh,一半记录有id1而我有col2的索引 - 我将使用索引进行排序”。但是,没有数据库会对所有数据进行排序(而不是使用索引),然后对其进行过滤。对于少量数据,排序更有效。

编辑:

查询:

SELECT u 
FROM UserView u 
WHERE u.viewedId=:viewedId AND u.viewDate >=:dateLimit 
ORDER BY u.viewDate DESC;

最佳指数为UserView(ViewId, viewDate)。假设UserView是一个表(或者可能只是从一个表中选择的视图),那么该索引应该用于WHERE(两个子句)和ORDER BY。< / p>