当前位置: 首页 > 面试题库 >

在一个字段上建立索引并在另一个字段上进行“循序渐进”

徐峰
2023-03-14
问题内容

假设我有一个小型数据库,其中包含三列:“ id1”,“ id2”和“ date”。我在字段“
id1”上建立数据库索引,因为它是一个经常选择的字段(许多选择查询都使用ex来运行:其中“ id1” = 125548)。

在某些特定的查询中,我需要根据未建立索引的表中的“日期”字段对用户的记录进行排序。我的好奇心是如果对日期进行排序操作(基本上是按订单执行的操作)字段将在整个数据库上运行,或者仅在我根据“
id1”字段选择的用户行(例如:125548)上运行。

以下是查询示例:

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

问题答案:

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

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

上的复合索引table(id1, col2)可以用于两个whereorder by

至于你的问题。通常,将首先进行过滤。可能有些数据库会查看该表的统计信息,并说“糟糕,记录有一半,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



 类似资料:
  • 问题内容: 对行列表进行排序(在每行的最后一个字段上排序)的最简单方法是什么?每行可能具有可变数量的字段。 就像是 是我想要的,但是sort(1)不需要负数来从末尾而不是从开始选择字段。 我也希望能够选择字段分隔符。 编辑:为问题添加一些特殊性:我要排序的列表是路径名列表。路径名可以是任意深度,因此字段数是可变的。我想对文件名组件进行排序。 此附加信息可能会更改操作行以提取最后一个字段的方式(可以

  • 问题内容: 如何查询或过滤一个字段不等于另一个字段?即,其中document1.city1.name不等于document1.city2.name。 这个的一些版本? http://www.elasticsearch.org/guide/zh- CN/elasticsearch/reference/current/search-request-script- fields.html 问题答案: 是

  • 本文向大家介绍如何在MongoDB中为多个字段建立索引的“或”索引?,包括了如何在MongoDB中为多个字段建立索引的“或”索引?的使用技巧和注意事项,需要的朋友参考一下 要为多个字段建立索引,请使用sureIndex()作为组合。使用sureIndex(),我们可以创建索引,甚至可以传递多个字段。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出-

  • 我在编程一个订单提交页面时遇到了一个相当大的问题,该页面的目的是提交一个订单的争议--提供两个字段被填写,但只有当一个字段少于另一个字段时。 基本上,一个是下拉,另一个是争端框,查询如下: 如果DispotestExtBox=“”而下拉框=“请选择...” 一切正常-提交按钮已启用 如果DisportestExtBox!=“”而下拉框=“请选择...” 错误(反之亦然,因此如果填充了Dispone

  • 我想使用Laravel雄辩的模型和关系来连接项目中所有表中的数据;然而,我在翻译这些关系时遇到了一个问题。例如,我有两张桌子;第一个是Books表,另一个是Author表。 如何在Books表上建立关系以获取和?