转自:http://blog.csdn.net/qq380107165/article/details/45502641

今天遇到一个查询问题,多加了一个查询参数导致查询超时报黄,经过公司DBA改进,涨姿势了。现在发出来跟大家分享一下!~

1 SELECT m.* FROM TB_UserSiteGroup u WITH(NOLOCK),Message.dbo.View_Message_8 m WITH(NOLOCK)
2 WHERE  m.FromUserID = u.UserID   AND u.AdminID =880982 and m.state=1  and m.touserID=0 AND u.siteid = 8
3 ORDER BY  m.time DESC

这是原始SQL,多加了u.AdminID =880982 参数后导致查询超时。

查询后跟WITH(NOLOCK) 理论上可以加快查询速度的33%,但有可能造成脏读(百度一下,你就知道)

这是改进后的SQL:

1 SELECT  m.*
2 FROM    TB_UserSiteGroup u WITH ( NOLOCK,INDEX=IX_TB_UserSiteGroup_SiteID )
3   JOIN       Message.dbo.View_Message_8 m WITH ( NOLOCK )
4 ON    m.FromUserID = u.UserID
5         AND m.state = 1
6         AND m.touserID = 0
7         AND u.siteid = 8
8         AND u.AdminID = 880982
9 ORDER BY m.time DESC

由之前查询时间2分多变成现在秒出。。。新建了IX_TB_UserSiteGroup_SiteID索引,并强制指定查询索引。

由之前逗号连接(不知道叫啥)改为JOIN连接形式。

问了DBA,DBA说JOIN连接会自动搜索最优、最匹配索引进行查找,而逗号连接则是根据where 条件进行匹配查找。之间存在功能损耗。

这些是我模糊记得的东西,DBA说的具体都记不清了,可能不准确,欢迎各位同学补充探讨。

1 SELECT m.* FROM TB_UserSiteGroup u WITH(NOLOCK,INDEX=IX_TB_UserSiteGroup_SiteID),Message.dbo.View_Message_8 m WITH(NOLOCK)
2 WHERE  m.FromUserID = u.UserID   AND u.AdminID =880982 and m.state=1  and m.touserID=0 AND u.siteid = 8
3 ORDER BY  m.time DESC

这段SQL是原始SQL加了指定索引后的结果。
查询耗时也是秒出。。。
从数据量和时间来看,暂时还看不出JOIN连接和逗号连接的本质区别。之后会跟进学习。

暂时就是这么多了,记下来供以后参考,也供大家参考学习。

欢迎 大拿 们不吝赐教。补充不对的地方……

转载于:https://www.cnblogs.com/bjxingch/articles/7324374.html

SQL 强制指定索引加快查询速度相关推荐

  1. mysql text 查询速度_数据库学习之让索引加快查询速度(四)

    数据库学习之让索引加快查询速度 目录 索引简介 mysql的索引分类 创建索引 添加与删除索引 索引简介 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构. ...

  2. 在sql强制指定索引查询

    MYSQL: 使用 关键字 force select * from table_name force index (index_name) where conditions; ORACLE: orac ...

  3. 建立索引为什么能加快查询速度 【转】

    建立索引为什么能加快查询速度 这是因为,创建索引可以大大提高系统的性能.第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因. ...

  4. Mysql查询时强制指定索引

    在某些情况下,我们给表添加的索引mysql的优化器并不认为他是高效的,但经过我们使用explain关键字发现,我们自己添加的索引的查询效率要高,这时候,我们就可以使用 FORCE INDEX(inde ...

  5. mysql千万级数据索引查询_mysql千万级数据量根据索引优化查询速度

    (一)索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经 ...

  6. mysql千万级数据量根据索引优化查询速度

    (一)索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经 ...

  7. win11如何加快搜索速度 Windows11更改文件索引加快搜索速度的设置方法

    有时候当你急需寻找一份文件的时候,可能查找筛选需要很长时间,但是有什么方法可以加快寻找文件的搜索速度呢?今天小编就为大家带来更改文件索引加快搜索速度的教程.更多Windows11安装步骤可以参考小白一 ...

  8. 利用SQL索引提高查询速度

    1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率.现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构. 索引的使用要恰到好处,其使用原则如下: 在经常进行连接 ...

  9. 为什么索引会加快查询速度?索引原理和使用原则

    索引是什么? 索引图解 定义:数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,以协助快速查询. 更新数据库表中数据. 首先数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址. ...

最新文章

  1. 从 React Router 谈谈路由的那些事
  2. cmd copy命令 文件复制【转】
  3. java虚拟机类加载机制浅谈_浅谈Java虚拟机(三)之类加载机制
  4. Java 8备忘单中的可选
  5. 苹果推出Find My Friends好友追踪iOS应用
  6. 分页 Paginator
  7. hbase 导入到es_HBase数据同步到ElasticSearch的方案
  8. 连接池配置oracle aix,一次AIX系统swap使用过高的故障解决过程
  9. GraphQL的JavaScript实现graphql-js应用举例
  10. vue使用echarts全国地图
  11. 利用网线实现电脑间超大文件传输
  12. scratch 大家来找茬
  13. 对于同一个数据库,Log shipping和log backup不可以同时运行
  14. Valine-实现QQ邮箱识别生成头像地址(完美解决头像问题)
  15. RxJS + Redux + React = Amazing!(译二)
  16. 厦门大学计算机调剂要求,厦门大学考研调剂复试有什么要求
  17. Doxygen 安装使用
  18. 【死磕JVM】看完这篇我也会排查JVM内存过高了 就是玩儿!
  19. 3CDB:基于3C技术的染色质互作信息数据库
  20. HTTP协议——HTTP报文组成

热门文章

  1. linux 查看进程的信号,Linux 进程信号查看与控制
  2. robust off matlab,matlab_robust LM test 求指点!(空间计量)
  3. c语言api_用C语言来拓展python的功能
  4. java静态变量实例变量_java中静态变量和实例变量的区别
  5. java界面编辑教程_java程序设计基础教程第六章图形用户界面编辑.docx
  6. java在创建对象时必须_Java中5种创建对象的方式
  7. java jdbc(mysql)驱动源码分析_JAVA JDBC(MySQL)驱动源码分析(二)
  8. 安卓手机qq怎么看密友值_qq亲密关系分数值是什么在哪看 怎么查情侣值或闺蜜值方法...
  9. 软件设计师考c语言,软件设计师教程考点精讲之C语言三大定律
  10. linux 修改ldap密码,centos – ldap强制用户更改密码