聚集索引于非聚集索引

1.数据库是什么?
数据库是把东西有序放好,还能随时找到的工具
应用程序,有序的数据管理----数据在硬盘(持久化;唯一的,多线程操作需要加锁;速度慢,可以SSD加快速度)
1000w---2G,那找个东西很慢,怎么样性能好一点?就是索引。
2.聚集索引(聚簇索引)图书馆,就是书多
分类---文学/武侠/IT---每个类别还有很多书,按照首字母排序
飞雪连天射白鹿,笑书神侠倚碧鸳---鹿鼎记--L
把数据有序的摆放,物理排序
找字母a开头
找时间范围的
SqlServer自增int,默认聚集索引,所以查询不排序就是id排序

换聚集索引,很耗时,很多硬盘操作,生产环境要谨慎
聚集索引只有一个,但是可以有多个字段
一般是自增主键/创建时间/价格
因为数据物理排序,当然查询快!

非常适合大于  小于  between 还有order by
聚集索引不能运算,不能like'% %' 索引条件在前

聚集索引            
新华字典文字排序都是按字母顺序            
            
            
3.非聚集索引            
偏旁部首找字--找页码--看详情            
徐            
            
图书馆电子查找,            
输入书名--楼层-书架-层            
            
重复存储值和路径,体积小一些,            
查找快,快速定位,直达目标    

非聚集索引                
不影响数据的物理排序,但是重复存储一个数据和位置                
找数据:先找索引--快速定位--拿到数据                
查找快,但是有维护索引的成本,不是越多越好                
非聚集索引,可以多个,每个索引也可以多个字段                
                
适合经常查询的字段,名称/账号                
非聚集索引不能运算,不能like'% %',索引条件在前    


4.建立索引的原则/建议:                    
1    主键是必须建立索引的(推荐数值主键,性能最高)                
2    外键列也要索引                 
3    经常查询的建立索引                
4    经常在where里面                
5     order by / group by /distinct                
6    聚合运算/where条件时,先索引字段                
                    
7    基本不怎么查询,                
8    重复值比较多的不要索引(sex/state)                
9    text/image 不要索引                
10    索引不要太多了                
                                

5.执行计划:    提交sql语句,数据库查询优化器,经过分析生成,制定多个查询方式,从中选择资源使用最少的                               数据库制定执行计划是按照使用资源最少,而不是时间最短

聚集索引于非聚集索引

受影响的行数    
影响的字节数    
影响的数据大小
        

聚集索引于非聚集索引

执行计划:                
1    Table Scan   全表扫描  性能最差            
2    Cluster Index Scan  性能最差,同上  虽然有聚集索引,其实也是全表扫描            
3    Index Seek(NonClustered)  性能非常高            
4    Index Scan 先index,再扫描            
5    Cluster Index  Seek   性能最高            
                
    一般出了问题,看看执行计划,找出scan,换索引,看效果,尝试            
    profiler好工具            
                
                
SELECT TOP 1000 *                
  FROM [advanced8].[dbo].[JD_Commodity_001]                
  with(index= NonClusteredIndex)                
强制要求走XX索引

    常规的SQL优化建议:            
1    对列的计算要避免,任何形式都要避免            
2    in查询  or查询,索引会失效,可能是拆分            
3    in 换exists            
    not in 不要用,不走索引            
4    is null和is not null 都不走索引            
5    <> 也不走索引              
    可以拆分成>  和<            
6    join时,链接越少性能越高            
    左链接,以左边的结果为准            
    右链接反过来,            
    连接字段要求带索引