设为首页 收藏本站
查看: 1004|回复: 0

[经验分享] aaron note sql server-Aaron的笔记

[复制链接]

尚未签到

发表于 2018-10-12 10:18:45 | 显示全部楼层 |阅读模式
BCP+内存文件(映射硬盘文件): sql server 2000每秒插入达5000行  SELECT INTO 远比 INSERT INTO 的性能好
  select * from sysobjects where xtype='TR'
  : see all triggers in current database
  alter database [DBName] collate SQL_Latin1_General_CP850_BIN
  or Chinese_PRC_CI_AS
  alter database [DBName] set RECOVERY simple
  exec master.dbo.xp_cmdshell 'bcp "table1" out "c:\as.txt" -c -q -U "sa" -P "******"'
  sp_who
  select * from master.dbo.sysprocesses
  select name from master.dbo.sysdatabases
  select databaseproperty('database1','IsTornPageDetectionEnabled')
  sp_configure 'cursor threshold', 0
  sp_dboption(database options): arithabort ......
  user options: XACT_ABORT ......
  查看当前未提交事务:select @@TRANCOUNT
  SET   FMTONLY  只将元数据返回给客户端。
  相当于select   *   from   t   where   1   =   2
  执行   SET   FMTONLY   ON   设置之后,数据库在接收到客户端对数据的请求之后,直接从系统表中获取数据列信息,生成空的结果集直接返回客户端,而不再对磁盘中存储的数据进行检索处理。
  DBCC SHRINKDATABASE或DBCC SHRINKFILE命令来收缩一个数据库
  读取数据页结构的命令DBCC Page
  DBCC SHRINKDATABASE或DBCC SHRINKFILE命令来收缩一个数据库
  读取数据页结构的命令DBCC Page
  在 SQL Server 2005 中,行不能跨页;当表中的所有固定列和可变列的行的总大小超过限制的 8,060 字节时,SQL Server 将从最大长度的列开始动态将一个或多个可变长度列移动到 ROW_OVERFLOW_DATA 分配单元中的页。
  每当插入或更新操作将行的总大小增大到超过限制的 8,060 字节时,将会执行此操作。
  将列移动到 ROW_OVERFLOW_DATA 分配单元中的页后,将在 IN_ROW_DATA 分配单元中的原始页上维护 24 字节的指针。
  若未指定索引类型,则默认为非聚集索引
  即使分组/分段查询的,但更新频繁,建议用非聚集索引;常常被顺序访问时,最好使用clustered索引
  频繁使用的外键可以建nonclustered索引
  在非聚集索引创建之前创建聚集索引(否则会引发索引重建)
  select INDEXPROPERTY (OBJECT_ID('table_name'),'index_name','IndexDepth')
  在 SQL Server 2005可以通过SQL Server Management Studio查看
  微软官方社区 http://technet.microsoft.com/zh-cn/library/ms187729.aspx
  如何查看sql语句执行时磁盘I/O操作信息 SET STATISTICS IO ON
  测试时释放缓存,2000里只能用dbcc unpintable,而且这个操作也不会立即释放表内存Buffer
  测试时释放缓存,2005可用CHECKPOINT建立检查点、DBCC DROPCLEANBUFFERS从缓冲池中删除所有清除缓冲区、DBCC FREEPROCCACHE从过程缓存中删除所有元素、DBCC FREESYSTEMCACHE从所有缓存中释放所有未使用的缓存条目、sp_cursor_list 查看全部游标、DBCC OPENTRAN查看数据库打开事务状态、
  如果一个表格中的两个索引共享一个盘区的同一个空间,而这两个索引并不相邻,那么最好重新建立索引让它们相邻
  当建立一个索引时,该索引的填充因子即被设置好了,因此填充因子不能动态维护,要更新填充因子必须重建索引
  2000以上可进行DBCC INDEXDEFRAG在线索引维护,也可以使用DBREINDEX重建索引(重建索引可以更好的消除碎片)
  DBCC SHOWCONTIG来查看统计量的状态
  执行该表格的UPDATE STATISTICS命令,SQL Server就刷新了关于该索引的信息了
  每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。
  聚集索引来实现下列功能:
  *   可用于经常使用的查询。
  *   提供高度唯一性。
  聚集索引与主键不一样,列的数据可以是null,数据列可能不唯一,但是系统会替你产生一个你看不到的唯一列
  newid 产生的新的值是不固定的,所以新的值导致索引B+树的变化是随机的。而 newsequentialid 产生的新的值是有规律的,则索引B+树的变化是有规律的
  Guid 有规律时速度要比无规律时候快
  Heaps是staging data的很好选择,当它没有任何Index时
  *   Excellent for high performance data loading (parallel bulk load and parallel index creation after load)
  *   Excellent as a partition to a partitioned view or a partitioned table
  聚集索引叶子节点就是具体数据,所以 聚集索引的覆盖率是 100%
  Indexing for AND时,要优化SQL执行计划,把容易查询的、匹配数量少的放在左边
  Indexing for OR:如果有In搜索关键字的对应索引。则系统会使用这个索引
  UNION ALL比UNION在数据量多的时候,要快很多
  ##########################
  SQL Server 支持block nested loops、index nexted loops、sort-merge、hash join以及hash team
  Hash Join特点:处理大量、未排序、无索引的数据
  Hash Join也用于许多集合比较操作,inner join、left/right/full outer join、intersect、difference等等
  Hash Join较大限制是它只能应用于等值联结(equality join)
  Nested Loop Join (嵌套循环联结)
  适用于一个集合大而另一个集合小的情况(将小集合做为外循环),I/O性能不错。
  当外循环输入相当小而内循环非常大且有索引建立在JOIN字段上时,I/O性能相当不错。
  当两个集合中只有一个在JOIN字段上建立索引时,一定要将该集合作为内循环。
  对于一对一的匹配关系(两个具有唯一约束字段的联结),可以在找到匹配元组后跳过该次内循环的剩余部分(类似于编程语言循环语句中的continue)。
  Merge Join (合并联结)
  可以不是等值联结
  MERGE JOIN 必须等待两个单独的SORT JOIN完成(如果使用索引作为数据源,可以跳过SORT JOIN这个步骤), 如果两个表的规模相差很大, 会很影响查询的性能。
  当查询的两个表都很大或者都很小的时候, 则应该只用MERGE JOIN,如果两个表都很小,则表扫描和分类将进行的很快;
  ##########################
  可以用Database Maintenance Plan Wizard ,DMPW维护和优化索引
  每秒1500条数据、千万并发执行的经验:
  如果一个表有上千万的数据,加索引和不加索引的select时间相差很大
  一个表只执行bcp方式的insert和select(表上加clustered索引,用于主键或查询where中的id),则不会引起索引页面的大量数据移动和重新排序,select和insert会一直保持很快
  bcp方式会自动判断文件是否已经导入,或部分数据已经导入


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-620658-1-1.html 上篇帖子: SQL Server多表搜索字符串 下篇帖子: SQL Server数据导入
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表