sql优化2
上面我们提到的是一些基本的提高查询速度的注意事项,但是在更多的情况下,往往需要反复试验比较不同的语句以得到最佳方案。最好的方法当然是测试,看实现相同功能的SQL语句哪个执行时间最少,但是数据库中如果数据量很少,是比较不出来的,这时可以用查看执行计划,即:把实现相同功能的多条SQL语句考到查询分析器,按CTRL+L看查所利用的索引,表扫描次数(这两个对性能影响最大),总体上看询成本百分比即可。
简单的存储过程可以用向导自动生成:在企业管理器工具栏点击运行向导图标,点击”数据库”、”创建存储过程向导”。复杂存储过程的调试:在查询分析器左边的对象浏览器(没有?按F8)选择要调试的存储过程,点右键,点调试,输入参数执行,出现一个浮动工具条,上面有单步执行,断点设置等。
一、不合理的索引设计
----例:表record有620000行,试看在不同的索引下,下面几个 SQL的运行情况:
---- 1.在date上建有一非个群集索引
select count(*) from record where date >
'19991201' and date < '19991214'and amount >
2000 (25秒)
select date,sum(amount) from record group by date
(55秒)
select count(*) from record where date >
'19990901' and place in ('BJ','SH') (27秒)
---- 分析:
----date上有大量的重复值,在非群集索引下,数据在物理上随机存放在数据页上,在
范围查找时,必须执行一次表扫描才能找到这一范围内的全部行。
---- 2.在date上的一个群集索引
select count(*) from record where date >
'19991201' and date < '19991214' and amount >
2000 (14秒)
select date,sum(amount) from record group by date
(28秒)
select count(*) from record where date >
'19990901' and place in ('BJ','SH')(14秒)
---- 分析:
---- 在群集索引下,数据在物理上按顺序在数据页上,重复值也排列在一起,因而在范
围查找时,可以先找到这个范围的起末点,且只在这个范围内扫描数据页,避免了大范
围扫描,提高了查询速度。
---- 3.在place,date,amount上的组合索引
select count(*) from record where date >
'19991201' and date < '19991214' and amount >
2000 (26秒)
select date,sum(amount) from record group by date
(27秒)
select count(*) from record where date &g
相关文档:
每天,每周的执行
比如可以控制每天只能投票三次。
每周要统计一下投票数。
1、你必须开启代理服务sql server agent
2、在企业管理器里,打开“管理—>sqlserver代理—>作业”,新增作业,新建“步骤”,在步骤里填入你要转移的SQL语句到“命令”框里。然后新建“� ......
SQL语句类似string.Format()组装变量的使用。
一般来说,我们会在程序运行期间将所要运行的命令语句组合成一个字符串,然后使用EXECUTE命令或系统存储过程
@0sp_executesql来运行。今天,我们将来详细探讨这两种方法各自的优劣点。
(一) 使用EXECUTE命令运行命令字符串
要使用EXECUTE命令来运行一个命令字符串的语法如� ......
如何连接到另一台机器上的sql server 2005
一、要进行两个地方的设置
1 点开始—程序—sql server 2005 –配置工具—sql server 2005应用配置器 ,如图:
选本地连接和远程连接中的 仅使用tcp/ip或& ......
当我们用oracle的SQL*Plus工具输入sql语句的时候,SQL*Plus的默认设置总有些不合理的地方,此时我们通过以下一些方法改进:
1、可以运用SQL*Plus自身一些语句改变环境参数。
SQL> set linesize 900 ; /* 更改显示的宽度, 设置成900后, 一行数据就不会分两行显示了 */
&nb ......
在PL/SQL程序设计中,有三种定义记录类型的方法:一种是使用%ROWTYPE属性;另一种是在PL/SQL程序的声明部分显示定义记录类型;最后一种方法是将记录类型定义为数据库结构或对象类型。
我先简单的介绍一个下面要用到的表的结构(黑体标明的字段为主键):
INDIVIDUALS表
INDIVIDUAL ID
FIRST NAME
MIDDLE_INITI ......