sql server insert 与 delete 三百万级数据量时速度极慢,有10分钟左右,求高手如何解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server insert 与 delete 三百万级数据量时速度极慢,有10分钟左右,求高手如何解决相关的知识,希望对你有一定的参考价值。

只向一张表中insert 和 delete 数据 ,已经建索引, select 很快,就是insert 和 delete 数据较慢

你首先确定是否用上了索引,你可以再网上搜下sql server的一些系统调优函数,我知道sybase数据库有个sp_showplan id,null,null,null 就可以看出那些使用了索引,那么定义了索引但是没被使用,一般用上了正确的索引如果还是10分钟的,那么在怎么优化都提高不了很多了,300万数量的表除了必要的索引外其他索引可以干掉,因为insert,delete每次操作都要对索引也要操作,修改索引本身要比你插值和删除要花费的时间多多了
你insert这个表如果数据不多,不应该有10分钟,delete因为要关联可能会有10分钟左右,如果你以上都操作了,可以考虑是否是索引坏了,重建下索引,最好先清下日志,防止日志满追问

谢谢你,我不用insert 与 delete了, 直接用update,update 非索引列会很快,几秒钟,但update 索引列就慢了。

追答

这个东西,还是看你where条件后面有没有用到索引,一些没用的索引其实可以干掉,占空间,耗资源,你可以看看你表结构,和where后面的变量类型是否一致,或者看下where后面有没有用到函数,比如convert,等,这些都有可能导致索引用不上。

参考技术A 建立索引,提高搜索效率,简单的说就是用jion而不是用from table a,table b等等。。追问

只向一张表中insert 和 delete 数据 ,已经建索引, select 很快,就是insert 和 delete 数据较慢

追答

如果是这样就利用事务来处理吧
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest values(5);
Query OK, 1 row affected (0.00 sec)

mysql> insert into dbtest value(6);
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)
象这样处理一下试试。

参考技术B 在事务内处理。 参考技术C 你用的是什么数据库管理系统?
mysql? sql server? oracle?

如何获取 SQL Server 中 INSERT、UPDATE、DELETE、SELECT 语句的速率?

【中文标题】如何获取 SQL Server 中 INSERT、UPDATE、DELETE、SELECT 语句的速率?【英文标题】:How to get the rate of INSERT, UPDATE, DELETE, SELECT statements in SQL Server? 【发布时间】:2018-03-15 18:52:45 【问题描述】:

我想知道 SQL Server 中INSERT, UPDATE, DELETE and SELECT 语句的速率。例如,每秒 100 次插入。这可能吗?我搜索了 SQL Server 相关的性能计数器,没有发现任何有趣的东西。希望有人能指出我正确的方向。提前致谢。

编辑

我正在使用 SQL Server 执行一些监视任务。我的 MySQL DBA 同事似乎可以很容易地从 MySQL 中获取这些数据。我被要求提供相同的数据,但用于 SQL Server。基本上我在问一种方法来获取在最后一秒、分钟等发生的 INSERT 数量。它是实例级别的指标,是所有数据库的所有 INSERT 的总和。

【问题讨论】:

率?你的意思是执行时间。您可以使用sql profile来收集语句和时间 每个 INSERT、UPDATE、DELETE 和 SELECT 语句都会有所不同。您所能做的就是根据真实的数据样本尝试它们以获得一个想法。 这是一个 DBA 问题;不是编程问题。 这甚至不是一个真正的问题。对此无法提供答案。每分钟允许的语句数量不是固定的。 【参考方案1】:

这个问题确实没有单一的答案,因为 INSERT 的速率会根据插入的表以及插入数据的行的宽度(以字节为单位)而有很大差异。

例如,包含 xml、images、varchar(max)'s、Unicode 字符串(如 nchar 和 nvarchar)或文件流的大列的表将比包含几个 int 和 varchar 列的表花费更长的时间.

所以要么给我们一个你要插入的具体表模式,要么答案是一个可靠的“它取决于”。

【讨论】:

以上是关于sql server insert 与 delete 三百万级数据量时速度极慢,有10分钟左右,求高手如何解决的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 SQL Server 中 INSERT、UPDATE、DELETE、SELECT 语句的速率?

sql delete+tcp server啥意思

SQL Server:INSERT/UPDATE/DELETE 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'

在Sql Server触发器中判断操作是Insert还是Update还是Delete

SQL server触发器中 update insert delete 分别给写个例子被

数据更新视图的创建与改动