如何提高 SQL Server 中日期时间过滤的性能?

2024-02-17

我在过滤时遇到问题datetime列。

我尝试了这两种方法:

datefield < '2013-03-15 17:17:55.179'
datefield < CAST('2013-03-15 17:17:55.179' AS datetime)

我有一个包含超过 3,000,000 个主要对象的大型数据库。

所以我需要提高我的性能datetime过滤。我正在阅读有关 UNIX 时间戳(将所有datetimeUNIX 时间戳,然后按此 UNIX 字段进行过滤)。

我认为这是比过滤更好的方法datetime。但如果有人知道其他方式,我将不胜感激。

我的查询是:

SELECT TOP (100)  ev.Title as Event_name, po.Name as POI_name, 
po.Address, po.City, po.Region, po.Country, po.Latitude, po.Longitude, ev.Start_time, 
(Select ID_Category FROM SubCategory s where ev.ID_SubCategory = s.ID_SubCategory) as ID_Category, 
ev.ID_SubCategory, ev.ID_Event, ev.ID_Channel, IDChanelEvent, 
ev.FavoriteCount, po.gmtOffset, v.IsFavorite, v1.IsFavorite  
FROM Events ev 
JOIN POI po ON ev.ID_POI = po.ID_POI 
JOIN (SELECT et.id_event as joinIdEv FROM EventTagLink et, tags t 
 WHERE t.id_tag = et.id_tag 
 AND ( t.Title = N'music' ) 
 ) as joinEvents 
 ON joinEvents.joinIdEv = ev.ID_Event 
LEFT JOIN Viewed v ON v.ID_Event = ev.ID_Event AND v.ID_User = 1 AND v.IsFavorite = 1 LEFT join Viewed v1 ON v1.ID_Event = ev.ID_Event AND v1.ID_User = 1 AND v1.IsFavorite = 0
WHERE 
--ev.GmtStop_time > '2013-03-15 14:17:55.188' AND 
po.Latitude > 41.31423 AND po.Latitude < 61.60511 
AND  po.Longitude > -6.676602 AND po.Longitude < 17.04498  
AND ev.ID_SubCategory in (3, 12, 21, 4, 30, 13, 22, 6, 14, 40, 23, 7, 32, 15, 41, 8, 50, 33, 16, 42, 25, 9, 34, 17, 35, 18, 44, 27, 36, 19, 45, 28, 37, 46, 29, 38, 47, 39, 48, 49, 10, 1, 11, 2, 20) 
--AND ev.GmtStart_time< '2013-03-15 17:17:55.179'
AND v1.IsFavorite is null

按我评论的时间过滤。

如果我关闭这些过滤器,请求持续时间为几秒钟。如果我打开它们,则请求持续时间将超过 25 秒。

  • 具有过滤日期时间的执行计划 https://www.dropbox.com/s/xjnu5om2r7yru04/execution_plan.sqlplan
  • 没有日期时间过滤器的执行计划 https://www.dropbox.com/s/0ab15b7nuamlw8s/execution_plan_without_datefilter.sqlplan

所以有很多关于执行计划、索引等的讨论。但是关于UNIX 时间戳,这就是我在那里提出问题的主要原因。它会提高性能吗datetime过滤?


对于 sql 中的日期时间索引,只是一个建议是索引占用空间会影响搜索时间(是的,这似乎很明显......但请继续阅读)。

在对日期时间建立索引时,例如“2015-06-05 22:47:20.102”,索引必须考虑日期时间中的每个位置。这在空间上变得非常大并且笨重。我利用的一个成功方法是创建一个新的日期时间列,并通过将时间四舍五入到小时来填充数据,然后在此新列上构建索引。示例“2015-06-05 22:47:20.102”转换为“2015-06-05 22:00:00.000”。通过采用这种方法,我们可以保留详细数据,并可以显示它或通过在这个新列上搜索来使用它,这使我们在返回结果的速度方面获得大约 10 倍(至少)的回报。这是因为索引不必考虑分钟、秒和毫秒字段。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何提高 SQL Server 中日期时间过滤的性能? 的相关文章

  • 如何防止 SQL Server 在导入数据时去除前导零

    A data file被导入到SQL Server桌子 数据文件中的一列是文本数据类型 该列中的值只能是整数 SQL Server 数据库中目标表中的相应列的类型为varchar 100 但在数据导入后 SQL Server 会存储以下值
  • 打开脚本任务时 SSIS 丢失文件引用

    我们使用自定义审核程序集 C 在脚本任务中记录 SSIS 中的多种操作 我们将在 GAC 中构建自定义程序集 用于运行时 并发布到 IDE VS2008 的公共程序集区域以供设计时文件引用 后构建完成后 自定义程序集可在运行时使用 并可在文
  • 指数数组的边界之外。 (微软.SqlServer.smo)

    我在用SQL Server 2008 R2 它运行良好 但最近 我改变了我的托管服务器 我发现他们已经安装了SQL Server 2012在服务器上 现在 问题是通过连接服务器数据库后SQL Server 2008 R2 当我单击任何表名称
  • Oracle:如何查找模式中上次更新(任何表)的时间戳?

    有一个Oracle数据库模式 数据很小 但仍然有10 15个表左右 它包含一种配置 路由表 有一个应用程序必须不时轮询此架构 不得使用通知 如果架构中没有数据更新 应用程序应使用其当前的内存版本 如果任何表有任何更新 应用程序应将所有表重新
  • MySQL:你能指定一个随机限制吗?

    有没有办法在 SQL MySQL 中随机化限制数字 我希望能够做的是在查询中获取随机数量的结果以在插入子查询中使用 而无需任何服务器端脚本 我希望能够作为假设说明运行的查询是 SELECT id FROM users ORDER BY RA
  • Postgresql 中的 id 列位置重要吗?

    我正在测试删除主键列 id 的迁移 我想使用外键作为主键 当我运行并恢复迁移时 我看到表的状态是相同的 只是 id 列现在是最后一个 它会以任何方式改变我的数据库的行为吗 我是否应该费心去恢复迁移恢复代码中的列顺序 理论上一切都应该没问题
  • t sql中的相对路径?

    如何获取t sql中的相对路径 举个例子 sql文件位于文件夹中D temp 我想获取文件夹中文件hello txt的路径D temp App Data 如何使用相对路径引用 假设我正在 SQL Server Management Stud
  • 获取查询的行号

    我有一个查询将返回一行 当表排序时 有什么方法可以找到我正在查询的行的行索引吗 我试过了rowid但当我期待第 7 行时却得到了 582 Eg CategoryID Name I9GDS720K4 CatA LPQTOR25XR CatB
  • 具有 LINQ 支持的最完整的 ORM?

    我正在寻找一个提供完整或接近完整的 LINQ 支持的 ORM LINQ 到 SQL 支持 LINQ 内部的所有内容 Contains Math Log 等 在不创建新数据上下文的情况下无法预先加载关系属性 ADO NET 实体框架 糟糕的
  • PreparedStatement setnull方法中Types.INTEGER和Types.NULL的区别

    下面的说法有什么区别 PreparedStatement setNull 1 java sql Types NULL and PreparedStatement setNull 1 java sql Types INTEGER 第一个指示驱
  • Postgres、更新和锁定顺序

    我正在研究 Postgres 9 2 有 2 个更新 每个更新都有自己的事务 一个看起来像 UPDATE foo SET a 1 WHERE b IN 1 2 3 4 另一个也类似 UPDATE foo SET a 2 WHERE b IN
  • 如果执行没有事务的删除语句,是否会删除部分内容?

    如果表myTable包含100000000条记录 我执行DELETE FROM myTable 没有开始交易并且出现问题 例如服务器电源故障 会删除一些记录吗 否 如果数据库引擎符合ACID http en wikipedia org wi
  • SQL Server 相当于 MySQL 的 USING

    在 MySQL 中 当您连接不同表中具有相同名称的列时 可以在连接中使用关键字 USING 例如 这些查询产生相同的结果 SELECT FROM user INNER JOIN perm USING uid SELECT FROM user
  • Yii 查询时对相关模型的限制

    我遇到了极限问题 我正在使用的代码如下 model PostCategory model record model gt with array posts gt array order gt posts createTime DESC li
  • 在存储过程结束时显式删除本地临时表有什么好处?

    考虑以下伪 T SQL 代码 由存储过程执行 CREATE TABLE localTable
  • SQL Server 2000 中是否提供公用表表达式 (CTE)

    我最近发现了以下文章 http www tsqltutorials com with common table expressions php http www tsqltutorials com with common table exp
  • Spring Boot MSSQL Kerberos 身份验证

    目前在我的春季靴子中application properties文件中 我指定以下行来连接到 MSSql 服务器 spring datasource url jdbc sqlserver localhost databaseName spr
  • 案例陈述以确定我是否应该结合

    我目前想做某种条件联合 给出以下示例 SELECT age name FROM users UNION SELECT 25 AS age Betty AS name 假设我只想在 用户 计数 gt 2 时合并第二个语句 否则不合并两者 总之
  • 通过将行旋转为动态数量的列来在 MySQL 中创建摘要视图

    我在 MySQL 中有一个表 其中包含以下字段 id company name year state 同一客户和年份有多行 以下是数据示例 id company name year state 1 companyA 2008 1 2 com
  • 从一个sql服务器选择到另一个sql服务器?

    我想将一台服务器 Data Old S1 中的一个表 T1 在 DB1 中 中的数据选择到另一台服务器 Data Latest S2 中的另一个表 T2 在 DB2 中 中的数据 我怎样才能做到这一点 请注意服务器的命名方式 查询也应该考虑

随机推荐

  • 如何在textview中设置unicode以在android中显示表情符号?

    我从服务器获取一些 json 字符串格式的 Unicode 字符串 表情符号图标 我的问题很奇怪 过去两天我一直在努力解决这个问题 当我解析 json 并将所有 Unicode 字符串存储在ArrayList
  • 求树的最大深度

    我知道如何找到二叉树的深度 但我不能概括它适用于任何树 有人可以概述一下用于查找树 不一定是二叉树 深度的伪代码吗 int findDepthOfTree tree int deepest 0 for child of root node
  • 我使用的是哪个版本的 Objective-C?

    我如何知道什么版本Objective C我在用着 我正在使用带有 xCode 的 Mac 我之所以问这个问题是因为我有一本书 Objective C 3 0 并且它说你可以像这样声明一个多维数组 int num 新 int 2 2 当我尝试
  • jquery scrollpane ms ajax updatepanel 回发后不起作用

    我收到了一个网站的新设计 设计者在设计中使用了jquery 我正在将设计实现到 ASP NET Ajax 应用程序中 但我遇到了一个问题 我有一个带有更新面板和菜单的页面 单击菜单项时 用户控件将动态加载到更新面板上的占位符中 这使得页面没
  • MVC 站点地图提供程序和本地化

    今天我发现 对于我的网站 我可以使用从 Github 下载的适用于 MVC3 的 SiteMap 提供程序 因为我的 Web 应用程序是 MVC3 情况如下 我的申请是多语言的 我有一个单独的图书馆 其中包含所有资源 然后这个库被添加到我当
  • 重命名 ASP.NET Core Razor Pages 中的页面/共享目录

    我正在使用 ASP NET Core 5 Razor 页面 通用模板进去Pages Shared 但我需要将其重命名为Pages Foo 如何指示运行时查找文件Pages Foo 我认为这是可能的Startup ConfigureServi
  • OpenShift 上的 WebSocket 不适用于远程客户端

    我有一个无法解决的问题 我使用 socket io 或 WebSockets Node js 库在 openshift 卡带上实现了 Node js WebSockets 服务器 对于其中任何一个 结果都是相同的 使用在同一 openshi
  • 函数和子程序有什么区别?

    函数和子程序有什么区别 有人告诉我函数和子程序之间的区别如下 函数接受参数 在本地工作 不会改变任何值或使用其范围之外的任何值 高内聚 它还返回一些值 子例程直接使用调用者或调用它的代码段的值 并且不返回值 低内聚性 即将某些代码分支到其他
  • 如何在 whoosh 中使用 n 元语法

    我正在尝试使用 n grams 来使用 Whoosh 进行 自动完成式 搜索 不幸的是我有点困惑 我做了一个这样的索引 if not os path exists index os mkdir index ix create in inde
  • 如何使用 Nuxt Auth 模块在 Vuex 中重新获取用户?

    简短的问题 是否可以通过 Nuxt Auth 模块手动更新 Vuex 中的用户数据 为什么我有这个问题 我的问题是这样的 我在用户文档中的 MongoDB 中保存了一些点赞 关注 我的认证是用Nuxt Auth实现的 Nuxt Auth 在
  • Angular UI Router - 允许任何查询字符串参数

    我正在使用 Angular UI Router 这在大多数情况下都运行良好 但是 我遇到了一种情况 我事先不知道查询字符串参数的名称 因此 通常使用 UI 路由器 您会定义如下所示的路由 stateProvider state test u
  • 如何解决超出纳秒范围的问题[重复]

    这个问题在这里已经有答案了 LastLogin LastPurchased 2018 08 21 00 28 04 081677 0001 01 01 00 00 00 2018 08 21 00 28 58 209522 2018 08
  • Javax.net.ssl.SSLHandshakeException:javax.net.ssl.SSLProtocolException:SSL 握手中止:SSL 库失败,通常是协议错误

    我正在尝试在android中运行以下代码 URLConnection l connection null Create connection uzip new UnZipData mContext l url new URL serveru
  • Postgresql WHERE 与age() 函数[重复]

    这个问题在这里已经有答案了 我很确定以前有人问过这个问题 但我正在努力为包含类似数据的表获取正确的语法 id date type report item id 1 2018 11 07 Ver ffentlichung des 9 Mona
  • 在不同片段之间导航时,BottomSheet 不会隐藏

    你好 我有一个bottomsheet使用一些文本视图 作为按钮 按下时它会导航到不同的片段 但问题是当textView被按下并导航到片段仍然底部工作表没有隐藏 最终必须点击屏幕才能隐藏底部工作表 我希望当片段启动时底部工作表将隐藏 这是我遇
  • 惰性和函数组合(haskell、erlang)

    有人可以解释或提供一些关于函数组合如何与惰性相关的资源吗 例如如何filter W map toUpper justaword 在 Haskell 中工作与在 erlang 中的对应工作相比 后者并不懒惰 每次需要另一个字符 或结束通知 时
  • 文件从哪里/如何填充到 /var/www/html 中?

    我正在学习 Docker 并试图理解volumes 看看这个例子WordPress 撰写 https docs docker com compose wordpress define the project和它的docker文件 https
  • 如何使内容显示在固定 DIV 元素下方?

    我的目的是在页面顶部创建一个菜单 即使用户滚动 该菜单也保留在页面顶部 例如 Gmail 最近的功能 其中常用按钮随用户向下滚动 以便允许他们执行对消息进行操作而无需滚动到页面顶部 我还想将所述菜单下方的内容设置为显示在其下方 目前 它显示
  • 如何访问 C++ Eigen 数组中的多个元素?

    我想检索特征数组中的某些元素并将它们作为向量返回 我使用以下代码 Eigen ArrayXXi test test resize 5 5 test setRandom Eigen Matrix
  • 如何提高 SQL Server 中日期时间过滤的性能?

    我在过滤时遇到问题datetime列 我尝试了这两种方法 datefield lt 2013 03 15 17 17 55 179 datefield lt CAST 2013 03 15 17 17 55 179 AS datetime