当前位置: 首页 > news >正文

指定索引

近来发现,SELECT * FROM ... 与 SELECT COUNT(*) FROM ...性能居然很不一样。在我的测试用例中,前者比后者快好多。

按照不假思索的理解,应该是SELECT COUNT(*)要快才对啊,只看多少条就行了;就算比SELECT * FROM 慢,也应该是慢一点点,数一下返回来的记录数不就行啦?对计算机来说,应该是轻而易举的事情。

可是偏不。

查看实际执行计划,发现两种语句的执行路径根本不一样。(不过其中的执行步骤,我也看不懂)

用到的索引居然也不同。

测试用例中,我这个表有这么两个索引,一个聚集,一个非聚集,都用到某一个列。在SELECT *中,优化器用的是聚集索引,而SELECT COUNT(*)中,用的却是那个非聚集索引。那个非聚集索引,是个复合索引,有两个字段,身躯庞大,看上去傻傻的,你用它,不慢才怪。但是优化器为什么这么喜欢用它,自动挑中它,真是天晓得了。

幸亏世界上还有在SQL语句中指定索引这么一说:

SELECT COUNT(*) FROM Table1 WITH(INDEX(索引名)) WHERE ...

指定我钟意的聚集索引,结果果然快多了。

对比如下:

SELECT COUNT(*)

未指定索引前,最快21秒,最慢30秒

指定索引,6秒

SELECT *,2秒

相关文章:

  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • 这个世界并不亏欠我们什么——Leo网上答疑52
  • 《python核心编程》笔记——文件的创建、读取和显示
  • 详解TCC89x的LCD数值设置
  • gentoo系统安装
  • 你为什么不写注释?
  • GO语言练习:网络编程 TCP 示例
  • “梳子”的用途很大
  • Linux监控本机当前状态命令
  • eclipse中svn的各种状态图标详解
  • 201507221403_《backbone之一——新建模型和集合、实例化模型、模型上监听事件的方法、模型设置和获取后台数据、配置理由方法、视图绑定事件的方法、绑定模型等》...
  • Android HAL实例解析
  • 15款优秀移动APP产品原型设计工具
  • ThreadPoolExecutor运转机制详解
  • 图片垂直居中在中间
  • 网络传输文件的问题
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • bootstrap创建登录注册页面
  • echarts花样作死的坑
  • idea + plantuml 画流程图
  • iOS | NSProxy
  • iOS 颜色设置看我就够了
  • JavaScript设计模式系列一:工厂模式
  • Java教程_软件开发基础
  • JS实现简单的MVC模式开发小游戏
  • storm drpc实例
  • Zsh 开发指南(第十四篇 文件读写)
  • 从输入URL到页面加载发生了什么
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 简单实现一个textarea自适应高度
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 目录与文件属性:编写ls
  • 前端临床手札——文件上传
  • 浅谈Golang中select的用法
  • 一个项目push到多个远程Git仓库
  • 一起参Ember.js讨论、问答社区。
  • 一天一个设计模式之JS实现——适配器模式
  • 函数计算新功能-----支持C#函数
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (转)linux下的时间函数使用
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ./和../以及/和~之间的区别
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .Net 高效开发之不可错过的实用工具
  • .NET 中创建支持集合初始化器的类型
  • .考试倒计时43天!来提分啦!
  • /etc/shadow字段详解
  • @Pointcut 使用
  • []串口通信 零星笔记
  • [20160807][系统设计的三次迭代]