当前位置: 首页 > 面试题库 >

SQL Server DELETE使用索引的速度较慢

朱鹤轩
2023-03-14
问题内容

我有一个SQL Server
2005数据库,我尝试将索引放在适当的字段上,以加快DELETE具有数百万行(big_table只有3列)的表中记录的速度,但是现在DELETE执行时间
更长 !(例如1小时对13分钟)

我与表之间有关系,我过滤依据的列DELETE在另一个表中。例如

DELETE FROM big_table
WHERE big_table.id_product IN (
SELECT small_table.id_product FROM small_table
WHERE small_table.id_category = 1)

顺便说一句,我也尝试过:

DELETE FROM big_table
WHERE EXISTS
(SELECT 1 FROM small_table
WHERE small_table.id_product = big_table.id_product
AND small_table.id_category = 1)

尽管它看起来比第一个要快一些,但是使用索引仍然要比不使用索引慢得多。

我在这些字段上创建了索引:

  1. big_table.id_product
  2. small_table.id_product
  3. small_table.id_category

我的.ldf文件在期间增长了很多DELETE

DELETE 当我在表上有索引时,为什么查询速度变慢? 我以为他们应该跑得更快。

更新

好的,共识似乎是索引会减慢速度,这是DELETE因为必须更新索引。虽然,我仍然不明白为什么它不能DELETE一次全部显示所有行,而仅在最后一次更新索引。

我从一些阅读中得到的印象是,DELETE通过WHERE更快地搜索子句中的字段,索引可以加快速度。

Odetocode.com说:

“在DELETE和UPDATE命令中搜索记录时,索引与SELECT语句一样工作。”

但是在文章的后面,它说太多的索引会损害性能

鲍勃 问题的答案:

  1. 表格中的5500万行
  2. 4200万行被删除
  3. SELECT不会运行类似的语句(引发了类型为’System.OutOfMemoryException’的异常)

我尝试了以下2个查询:

SELECT * FROM big_table
WHERE big_table.id_product IN (
SELECT small_table.id_product FROM small_table
WHERE small_table.id_category = 1)

SELECT * FROM big_table
INNER JOIN small_table
ON small_table.id_product = big_table.id_product
WHERE small_table.id_category = 1

都运行 25分钟* 后都 失败 ,并显示来自SQL Server 2005的错误消息*

An error occurred while executing batch. Error message is: Exception of type 'System.OutOfMemoryException' was thrown.

数据库服务器是具有7.5 GB内存的较旧的双核Xeon计算机。这是我的玩具测试数据库:),所以它没有运行其他任何东西。

CREATE 为使索引正常工作后,是否需要对索引进行特殊处理?


问题答案:

索引使查找速度更快-就像书后的索引一样。

更改数据的操作(如DELETE)速度较慢,因为它们涉及操纵索引。在本书的末尾考虑相同的索引。如果添加,删除或更改页面,则还有更多工作要做,因为您还必须更新索引。



 类似资料:
  • 我们已经使用jmap在Java 6下运行的大型多服务器应用程序上测量堆大小大约2年了。我们每分钟测量一次。每次测量所用的时间(经过的时间)不到1秒。 我们现在正在Java 7下测试同一个应用程序。现在突然之间,jmap通常需要10秒、20秒,有时甚至更长时间,而且它似乎慢了下来(甚至可能停止!)在那段时间里,JVM。 我们在jmap输出中看到的唯一区别(Java6和Java7之间)是关于有多少字符

  • 问题内容: 它们看起来几乎一样,甚至是语法? 使用什么?或什么时候使用什么? 问题答案: 速度不再是真正活跃的开发。Freemarker是。 根据我的经验,Freemarker也更加灵活。

  • 问题内容: 在我的Rails应用程序中,我具有允许查找与当前登录用户最接近的用户的功能。我为此使用了Geocoder gem。在用户模型中,我具有如下范围: 这非常有效,但是对于大量用户而言却很慢。当我调用此作用域时,它将生成以下sql查询: 我正在尝试为此创建索引,但它们不起作用。我正在尝试以下组合: 我应该如何添加索引以加快此查询的速度? 编辑:我忘记添加我的纬度和经度列是小数。 此查询的AN

  • 主要内容:一、索引概述,1.索引的分类,二、索引的创建,1.创建表时创建索引,2. 在已经存在的表上创建索引,三、删除索引,四、隐藏索引,五、哪些情况下适合创建索引,1.频繁作为 WHERE 查询条件的字段,2. 有唯一性限制的字段,3.经常GROUP BY和ORDER BY的列,4.UPDATE、DELETE的WHERE条件列,,5.DISTINCT字段需要创建索引,6.多表JOIN连接操作时,7. 使用列的类型小的创建索引,,,,,,,,,,,,上一篇我们主要是对索引设计体系的一个讲解,本篇

  • 当我尝试使用和库打印文档时-一切都很好,但打印速度很慢。这个问题有什么解决方案吗? 以下是Python代码:

  • ES_MAX_MEM设置为4G,ES_MIN_MEM设置为2G 每天晚上,我们在。NET应用程序中使用NEST对15000个文档进行索引/重新索引。在任何给定时间,只有一个索引具有<=15000个文档。 当服务器第一次安装时,索引和搜索在最初的几天里是快速的,然后索引开始变得越来越慢。大容量索引一次索引100个文档,一段时间后,大容量操作最多需要15秒才能完成。之后,我们开始看到大量以下异常和索引