数据库的一些知识

sqlserver 临时表和表变量,也是存在物理文件上的,会产生I/O,如果条件不够,建议把 temdb放到高速I/O的硬盘上

长sql,select * 肯定会影响速度也会占带宽

数据的最小单位是页,sqlserver页的容量是8k,小表一页可以放更多的行,大表一页只能放较少的行,跨页查询会影响性能,所以列数效多的表,查询速度肯定不如列数效少的表。

索引是的原理相当于分叉树,如果完全不重复的列,用索引效率最高,相反,如果重复数据很多的列,用索引可能还不如全表扫描。

如果一个列有99%的数据是男,1%的数据是女,如果这个列是搜女,那么非常快,如果这个列是搜男,就可能比不加索引还慢。

有时候,我们要看业务,如果是搜女的多,那么就加索引,就牺牲搜男的业务。


sql永远是先搜内存,如果内存没有,会去硬盘加载数据到内存,再去内存取。


count(1) 统计第一列,非null的行数

如果有索引在一个列上,最好非null

In语句的用Inner join实现

语句如果union了,可去掉distinct,提高性能 例如:
   Select distinct * from A
   Union
   Select distinct * from B

用ef,linq to sql拼成的sql语句,会因为兼容性,容错性,扩展性这类的原因,生成一堆无用的语句,这些语句很容易不命中索引。

组合索引 重复低的放前面,重复高的放后面

利用set statistics io on 进行调优

on 列 include (列2,列3)

将列2,列3的数据加载到索引列上,查这两列,可以不用读原表

join时 on在关联时查,where在关联后查

利用好文件组

如果所有表都在一个文件里(mdf),那么文件扩容的概率就会很大,这样就会修改头文件,就会造成等持


有时候我们为了拼sql之类的事情,会把一些东西拼到一个临时表,然后再join这个表,在on里面进行条件查询

这有可能会有性能问题

在尝试中,执行计划里,就算你临时表中就一条数据,查描这个表,构建这个表都会有比较大的性能开销。这个问题有待研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值