标签归档:sql优化

select 语句的编写标准


摘要:
下文讲述sql脚本编写中,select的编写注意事项,如下所示:

1.禁止使用 select * ,只展示所需的字段信息

2.超过5万数据,尽量少使用like 关键字进行模糊搜索

3.禁止大表参入join运算

4.同一字段上,少用or ,都使用in

5.对于大表,多拆分为临时表,然后进行join

MSSQL优化“if exists性能”的方法分享


摘要:
下文讲述MSSQL数据库中,使用 top 1 查询方式优化If exists性能的方法分享,如下所示:
实验环境:sqlserver 2008 R2

 
/*
在日常的检测数据表是否存在数据时,我们会采用这种写法
这种写法有一个弊端,就是可能返回了很多行记录,和返回不必要的列
这种写法貌似会降低sql脚本的性能
*/
IF EXISTS( SELECT [列名] FROM [数据表名称] WHERE [检索条件] )  
BEGIN  
  /*sql 脚本*/
END  
 
 
/*
 如果我们使用top 1 检索一条数据,那么大大的减少了数据的返回量
  并且在列名处放入NULL,或一个常量,就可以做到不返回任何数据,
  只获取是否存在行数据
   笔者认为这种方式比前一种方式更高效,可以作为优化if exists查询的写法
*/
IF EXISTS( SELECT TOP 1 '' FROM dbo.[Table] WHERE xxx = xxxxxx )  
BEGIN  
 /*
  sql脚本
 */
END  


mssql sqlserver order by 排序字段运行速度慢的处理方法分享


摘要:
下文记载sql脚本中order by关键字导致运行速度慢的处理方法分享,如下所示:
实验环境:sql server 2008 R2


order by关键字是我们在编写sql脚本时,常用的关键字,今天有一个同事编写了一个order by的sql语句,运行速度非常的慢,下面我们将解决此问题的处理方法分享如下:
首先order by 运行慢有以下原因:

1.排序字段上没有设置合适的索引
2.排序字段后加入了asc或desc同索引上的排序方式不同,导致索引失效
3.排序字段中加入了函数导致索引无效
4.涉及多个排序字段,并且这多个字段不在同一张数据表中
5.排序字段是一个text字段,无法运用索引,所以导致效率低下,需调整排序字段类型

根据以上order by 可能导致慢的原因,我们可以进行一些针对性的优化:
1.让order by 涉及字段存在一个数据表中
2.order by字段上建立合适的索引(索引中注意索引键及索引所包含的列)
3.order by 字段上的排序方式同索引上的排序方式须一致
4.禁止对text字段做排序(如果一定要对text字段做排序,请使用varchar(max)或nvarchar(max)对字段进行存储)