SqlServer插入慢的问题解决

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 这个是我加入的QQ群里面一个网友问的问题。他说一个表做一个INSERT都会超时。正困惑呢,向群里面的人求助。我刚好对这方面知道点,就回答了说要优化聚集索引。他不明白具体该怎么做,似乎也不知道什么是聚集索引。

这个是我加入的QQ群里面一个网友问的问题。他说一个表做一个INSERT都会超时。正困惑呢,向群里面的人求助。我刚好对这方面知道点,就回答了说要优化聚集索引。他不明白具体该怎么做,似乎也不知道什么是聚集索引。我对他说你可以看看你插入记录时的磁盘IO是否比较多,他说他的磁盘已经换成了RAID,不好查看磁盘IO。OK, 我继续替他分析道: 你那个insert慢是因为你每次插新记录,数据库服务器都要在中间的一个位置插入,引起磁盘文件的大量读写. 他说: 如何解决?  我的硬件配置已经没法升级了. 我说: 你可以看看聚集索引, 要优化聚集索引. 他似乎不太明白, 写了下面这写东西:

是这个吗:


use WanerSoft2007
declare @table_id int
set @table_id=object_id('dbo.Ws_UserProInfo')
dbcc showcontig(@table_id)
dbcc dbreindex('dbo.Ws_UserProInfo','',0)

我看了一下, 说这是重做索引的批处理,不是聚集索引.我继续说道:聚集索引是指记录的物理摆放次序即按照聚集索引来做的。是最重要的一个索引,聚集索引设计的好,多种数据库操作都可以获得好的性能。设计的不好就会引起性能上的巨大差异, 比如插入操作, 设计得好时,新记录只需要在物理的最后添加就可以了,不需要移动很多记录,所以快,设计得不好时,新记录就是在物理上的中间某个位置插入,那么就必须移动很多记录,就会有大量的磁盘IO。他去找了一会,回来给我贴了个图:

img_79d1973c59573f7e1d8f99e6693e95bd.gif

我看了图,对他说聚集索引要选用短的字段,还要单向递增,可以选日期,identity等。他这回就明白了,问是不是聚集索引里面去掉bookid和nclassid字段. 我说是,他照做了,后来回来说,太好了,问题解决了。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
从sql语句的角度解刨SqlServer插入语句的并发问题
从sql语句的角度解刨SqlServer插入语句的并发问题
sqlserver 多表关联更新
sqlserver 多表关联更新
129 0
|
索引
SqlServer 索引
SqlSever索引
6644 0
|
SQL 索引
SqlServer 正确使用索引
在SqlServer对于没有SARG(search argument/SARG)运算符的表达式,索引是没有用的,SqlServer对它们很难使用比较优化的做法。
4708 0
|
存储 监控 数据库
我是如何在SQLServer中处理每天四亿三千万记录的
原文:我是如何在SQLServer中处理每天四亿三千万记录的 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务。
1293 0
|
SQL Go 数据库
SQLSERVER中如何忽略索引提示
原文:SQLSERVER中如何忽略索引提示 SQLSERVER中如何忽略索引提示 当我们想让某条查询语句利用某个索引的时候,我们一般会在查询语句里加索引提示,就像这样 SELECT id,name from TB with (index(IX_xttrace_bal)) where ba...
1059 0
下一篇
无影云桌面