数据库索引、优化

参考地址:

如何看ms sqlserver数据库的执行计划https://blog.csdn.net/luoyanqing119/article/details/17022649     

 

sqlserver索引的原理和应用

聚集索引和非聚集索引

数据库sql优化大总结之 百万级数据库优化方案

数据库优化之程序操作优化https://www.cnblogs.com/ak2012/archive/2012/12/28/2012-122803.html

 

 上图中,数据库执行一个t-sql发生的事,了解一下数据库的构成以及功能。

执行计划:

  可以缓存,存储过程/参数化查询

  select * from user where id=1

  select * from user where id=2

  select * from user where id=@id

数据是什么?

  数据库就是把东西有序放好,还能随时找到的一个工具。应用程序,有序的数据管理,数据在硬盘上(持久化,唯一的,多线程操作需要加锁,速度慢,可以ssd加快速度)。char nvarchar字段最长是8kb。

聚集索引

  举个例子,在图书馆中,就是书多。图书馆是怎么分类的呢?文学、武侠、it…..每个类别还有很多书啊,就按照首字母排序。新华字典文字都是按照字母排序的。聚集索引也叫聚簇索引,把数据有序的拜访,物理排序,找字母a开头,找时间范围的。。。

  sqlserver自增int,默认聚集索引,所以查询不排序,就是id排序。换聚集索引很耗时,很多的硬盘操作,生产环境需要谨慎。聚集索引只有一个,但是生成聚集索引的可以有多个列。一般是自增主键/创建时间/价格。因为数据物理排序了,所以查询快,非常适合大于、小于、between order by。

  聚集索引速度大于非聚集索引

非聚集索引

  在新华字典中,偏旁部首查找汉子—找页码—-看详情。图书馆电子查找,输入名字—楼层—-书架—层。

  特点:重复存储值和路径,体积小一些,所以查找快一些,快速定位,直达目标。不影响数据的物理排序,但是会重复存储一个数据和位置。

  找数据:先找索引—-快速定位—–拿到数据,查找快,但是有维护的索引的成本,请小心。

  非聚集索引可以有很多个,好像最多个255个,每个索引也可以有很多个字段,建议索引不要超过10个。适合经常查询的字段。非聚集索引不能运算,不能like’% %’,也不能where id-1>10。like ‘a%’这个是可以用非聚集索引的。

建议索引的原则/建议:

  1、主键是必须建立索引的(推荐数值主键,性能最高)

  2、外键也要索引,join能提升性能

  3、经常查询的字段建立索引

  4、经常在where里面的也要建立索引

  5、order by 、group by、distinct

  6、聚合运算/where条件时,先索引字段

不需要建立索引的:

  1、基本不怎么查询的

  2、重复值比较伛的

  3、text/image不要索引

  4、索引不要太多了

还有其他的索引,主xml索引、辅助xml索引、空间索引、非聚集columnstore索引(数量超过千万的时间建立的索引,先出的一个东西吧)

 

   执行计划:

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

    1、table scan 全表扫描性能最差
    2、cluster index scan (聚集索引的扫描) 性能最差,同上,虽然有聚集索引,其实也是全表扫描
    3、index seek(nonclustered)(索引查找) 性能非常高
    4、index scan 先index 再扫描
    5、cluster index seek 性能最高

常规的sql优化建议

  1、对列的计算,任何形式都要避免

  2、in 查询 or 查询索引会失效,可能是拆分

  3、in 换 exists,not in 不要用,完全不走索引

  4、is null 和 is not null都不走索引,索引里面不保存null的

  5、<>这种也不走索引,可以拆分成< 和 >

  6、join时,连接越少,性能越高。左连接,以左边的表结果为主;右连接,反过来;连接字段要求带做引

 

当数据库梁达到上亿之后,索引用处就不大了,sqlserver数据库,两千万就可以了。当数据量过大,就应该从数据库设计层次找问题了。

 

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐