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

数据库性能优化之为什么查询数据慢?

1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
2、I/O吞吐量小,形成了瓶颈效应.
3、没有创建计算列导致查询不优化.
4、内存不足
5、网络速度慢
6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源.
9、返回了不必要的行和列

10、查询语句不好,没有优化
可以通过如下方法来优化查询 :
1、把数据,日志,索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持.数据量(尺寸)越大,提高I/O越重要.
2、纵向,横向分割表,减少表的尺寸(sp_spaceuse)
3、升级硬件
4、根据查询条件,建立索引,优化索引,优化访问方式,限制结果集的数据量.注意填充因子要适当(最好是使用默认值0).索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段
5、提高网速;
6、扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存.配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置.运行 Microsoft SQL Server? 2000 时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的 1.5 倍.如果另外安装了全文检索功能,并打算运行 Microsoft 搜索服务以便执行全文索引和查询,可考虑:将虚拟内存大小配置为至少是计算机中安装的物理内存的 3 倍.将 SQL Server max server memory 服务器配置选项配置为物理内存的 1.5 倍(虚拟内存大小设置的一半).
7、增加服务器 CPU个数;但是必须明白并行处理串行处理更需要资源例如内存.使用并行还是串行程是MsSQL自动评估选择的.单个任务分解成多个任务,就可以在处理器上运行.例如耽搁查询的排序,连接,扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理.但是更新操作Update,Insert, Delete还不能并行处理.
8、如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引,耗空间. like 'a%' 使用索引 like '%a' 不使用索引用 like '%a%' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR.对于字段的值很长的建全文索引.
9、DB Server 和APPLication Server 分离;OLTP和OLAP分离
10、查询时不要返回不需要的行,列
11、用sp_configure 'query governor cost limit'或者SET QUERY_GOVERNOR_COST_LIMIT来限制查询消耗的资源.当评估查询消耗的资源超出限制时,服务器自动取消查询,在查询之前就扼杀掉. SET LOCKTIME设置锁的时间.

12、用select top 100 / 10 Percent 来限制用户返回的行数或者SET ROWCOUNT来限制操作的行;

13、,在SQL2000以前,一般不要用如下的字句: "IS NULL", "<>", "!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE", and "LIKE '%500'",因为他们不走索引全是表扫描.也不要在Where字句中的列名加函数,如Convert,substring等,如果必须用函数的时候,创建计算列再创建索引来替代.还可以变通写法:Where SUBSTRING(firstname,1,1) = 'm'改为Where firstname like 'm%'(索引扫描),一定要将函数和列名分开.并且索引不能建得太多和太大.NOT IN会多次扫描表,使用EXISTS,NOT EXISTS ,IN , LEFT OUTER JOIN 来替代,特别是左连接,而Exists比IN更快,最慢的是NOT操作.如果列的值含有空,以前它的索引不起作用,现在2000的优化器能够处理了.相同的是IS NULL,"NOT", "NOT EXISTS", "NOT IN"能优化她,而"<>"等还是不能优化,用不到索引

相关文章:

  • ES6 let和var的区别是什么?
  • js 将多个对象合并成一个对象 assign方法。ES6新特性有哪些
  • Vue中显示img图片,显示不出来怎么办?vue显示图片
  • Vue项目打包组件并上传到npm在其他项目和下载引用 步骤流程
  • Vue-Cli3 配置文件 全局生产环境及开发环境
  • git 常用命令 会这些就够了
  • CSS3 弹性盒子布局
  • CSS 开发常用
  • 浏览器兼容CSS的坑 对应前缀及CSS预处理
  • 饿了么平台最全开发API接口列表 elm接口 2019
  • js cookei 日期转换 随机ID 随机颜色 数组位置打乱 工作开发提升效率
  • Vue SSR服务端渲染 vue预渲染
  • Nuxt.js 入门到实战 多参数 中间件 插件异步获取数据
  • Vue 自定义拖拽指令 v-drag vue+element 实现拖拽 Drag 弹框
  • github 按条件查找项目 按star 语言 日期 排名 寻找实战案例模板等项目
  • [译]Python中的类属性与实例属性的区别
  • 07.Android之多媒体问题
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • gulp 教程
  • JAVA SE 6 GC调优笔记
  • javascript 哈希表
  • PAT A1050
  • PV统计优化设计
  • Redis学习笔记 - pipline(流水线、管道)
  • scala基础语法(二)
  • Unix命令
  • 山寨一个 Promise
  • 双管齐下,VMware的容器新战略
  • 微信小程序--------语音识别(前端自己也能玩)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​2020 年大前端技术趋势解读
  • ​低代码平台的核心价值与优势
  • ​渐进式Web应用PWA的未来
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • (7)STL算法之交换赋值
  • (二)hibernate配置管理
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转载)从 Java 代码到 Java 堆
  • ****Linux下Mysql的安装和配置
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET Micro Framework初体验
  • .NET Remoting学习笔记(三)信道
  • .net wcf memory gates checking failed
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @RequestMapping处理请求异常
  • @RequestMapping-占位符映射
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [2023-年度总结]凡是过往,皆为序章
  • [github全教程]github版本控制最全教学------- 大厂找工作面试必备!
  • [go] 迭代器模式
  • [HITCON 2017]SSRFme perl语言的 GET open file 造成rce