一,数据库执行T-SQL得过程以及功能
执行计划 : 可以缓存,存储过程/参数化查询
二, 构成数据库得存储机制
- 数据页(Page):8kb/page 任何一条数据不能跨页存储:数据长度不能超过8096,char varchar max就是8096,text存储超过8kb,会存在另外一个page,数据页只存储位置(效率肯定很低),int/DateTime:可以放入一个page(设计数据库时候,字段类型空间范围尽量小一点),
- 管理数据页(IAM Page):记录好数据页在硬盘得具体位置
- 文本/图像页
- 索引页:数据&位置(索引是一个独立的,重复的存储;体积小,扫描快)
三, 索引
-
聚集索引(聚簇索引)[新华字典文字排序都是按字母顺序]
1.把数据有序得摆放,物理排序
2.SqlServer 自增int,默认聚集索引,所以查询不排序就是id排序
3.聚集索引只有一个,但是可以有多个字段
4.一般是自增主键/创建时间/价格
5.因为数据物理排序,当然查询快!
6.非常适合大于 小于 between 还有order by
7.聚集索引不能运算,不能like’% %’ 索引条件在前 -
非聚集索引[偏旁部首找字–找页码–看详情]
1.不影响数据的物理排序,但是重复存储一个数据和位置
2.找数据:先找索引–快速定位–拿到数据
3.查找快,但是有维护索引的成本,不是越多越好
4.适合经常查询的字段,名称/账号
5.非聚集索引不能运算,不能like’% %’,索引条件在前 -
建立索引的原则/建议:
1.主键是必须建立索引的(推荐数值主键,性能最高)
2.外键列也要索引
3.经常查询的建立索引
4.重复值比较多的不要索引(sex/state)
5.text/image 不要索引
6.索引数量不宜过多
7. order by / group by /distinct
8. 聚合运算/where条件时,先索引字段
9. 基本不怎么查询
10.经常在where里面 -
执行计划:提交sql语句,数据库查询优化器,经过分析生成,制定多个查询方式,从中选择资源使用最少的,数据库制定执行计划是按照使用资源最少,而不是时间最短
- (Sql SerVer)五种执行计划的类型
1.Table Scan 全表扫描 性能最差
2.Cluster Index Scan 性能最差,同上 虽然有聚集索引,其实也是全表扫描
3.Index Seek(NonClustered) 性能非常高
4.Index Scan 先index,再扫描
5.Cluster Index Seek 性能最高
建立: 一般SQL出了问题,看看执行计划,找出scan,换索引,看效果,尝试