查询速度慢的原因很多,常见如下几种:没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)。
查询速度慢的原因很多,常见如下几种:
没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)。
I/O吞吐量小,形成了瓶颈效应。
没有创建计算列导致查询不优化。
内存不足。
网络速度慢。
查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)。
锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)。
sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
返回了不必要的行和列。
查询语句不好,没有优化。
可以通过如下方法来优化查询 :
1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要。
2、纵向、横向分割表,减少表的尺寸(sp_spaceuse)。
3、升级硬件。
4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个 ......
以前一直觉得linq to sql生成类似where id not in (1,3,5)或where id not in (select id from ...)这样的条件不是很方便,每次我都是把条件ID事先取到一个数组里,然后用 !Arr.Contains(c.Id)这样处理,今天突然发现这样好傻,其实可以完全直接用linq写成一句,贴个示例在这里,以后备查
from a in TableA where !(from b in TableB Where ... select b.Id).Contains(a.Id)
最终翻译出来的语句并非跟not in 完全一样的,而是用not exists(...),不过效果完全相同,能达到要求就行了! ......
---附加数据库
sp_attach_db '数据库名','数据库全路径','数据库日志全路径'
---查看数据库逻辑文件名
RESTORE FILELISTONLY from disk = '备份文件'
---还原数据库
restore database hzrb from disk = '备份文件'
with move '主逻辑名' to '存放mdf路径'
,move '日志逻辑名' to '存放ldf路径'
--修改数据库的逻辑文件名(数据)
ALTER DATABASE NEW
MODIFY FILE(NAME='Old_Data',NEWNAME='New_Data')
GO
--修改数据库的逻辑文件名(日志)
ALTER DATABASE NEW
MODIFY FILE(NAME='Old_Log',NEWNAME='New_Log')
GO ......
in 的话, 如果是null 就不比较了,既不是in 也不是 not in
exists的话 因为用 = 加在条件里比较了,所以 null 是 not exists
select *
from pricetemp
where cast(商品コード as varchar(10))not in(
select shohin_cd
from m_price)
select *
from pricetemp
where not exists (select shohin_cd
from m_price
where cast(pricetemp.商品コード as varchar(10))=m_price.shohin_cd)
以上2条会有不同的结果,因为 pricetemp.商品コード 有很多 null ......
in 的话, 如果是null 就不比较了,既不是in 也不是 not in
exists的话 因为用 = 加在条件里比较了,所以 null 是 not exists
select *
from pricetemp
where cast(商品コード as varchar(10))not in(
select shohin_cd
from m_price)
select *
from pricetemp
where not exists (select shohin_cd
from m_price
where cast(pricetemp.商品コード as varchar(10))=m_price.shohin_cd)
以上2条会有不同的结果,因为 pricetemp.商品コード 有很多 null ......
代码如下:
EXEC sp_rename '表名.[原列名]', '新列名', 'column'
*************************************************************************
Transact-SQL 参考
sp_rename
更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
示例
A. 重命名表
下例将表 customers 重命名为 custs。
EXEC sp_rename 'customers', 'custs'
B. 重命名列
下例将表 customers 中的列 contact title 重命名为 title。
EXEC sp_rename 'customers.[contact title]', 'title', 'COLUMN'
***********
而修改数据库名则用
sp_renamedb [ @dbname = ] 'old_name' , [ @newname = ] 'new_name'
......
通配符_
"_"号表示任意单个字符,该符号只能匹配一个字符."_"可以放在查询条件的任意位置,且只能代表一个字符.一个汉字只使用一个"_"表示.
例子:
if PATINDEX('%[吖-做]%','需要判断的字符')>0 -- 判断是否有字符
print '有汉字'
else
print '无汉字'
通配符%
"%"符号是字符匹配符,能匹配0个或更多字符的任意长度的字符串.在SQL语句中可以在查询条件的任意位置放置一个%来代表一个任意长度的字符串.在查询条件时也可以放置两个%进行查询,但在查询条件中最好不要连续出现两个%
通配符[]
在模式查询中可以利用"[]"来实现查询一定范围的数据.[]用于指定一定范围内的任何单个字符,包括两端数据
通配符[^]
[^]用来查询不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。
如:select * from alluser
where username like 'M[^abc]%'
表示从表alluser中查询用户名以M开头,且第二个字符不是a,b,c信息.
ESCAPE子句的模式匹配
可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,一个样本数据库包含名为 comme ......