Questions tagged «delete»

在数据库结构化查询语言(SQL)中,DELETE语句从表中删除一个或多个记录。

1
删除语句中未使用的聚集索引
我有一个SQL Server表定义如下 CREATE TABLE [dbo].[Production_Detail] ( [Id] [bigint] NOT NULL DEFAULT (NEXT VALUE FOR [dbo].[Production_Detail_Seq]), [Meta_Data_ID] INT NOT NULL , [Production_Detail_Time] DATETIME NOT NULL, [Production_Detail_Time_Local] DATETIME NOT NULL, [Production_Detail_Value] FLOAT NULL, [IntegratedDM] BIT NOT NULL DEFAULT 0, [DailyIntegratedDM] BIT NOT NULL DEFAULT 0, [InsertedDate] DateTime NOT NULL, [ModifiedDate] DateTime NOT …

1
磁盘文件删除和清除的影响
我有一个经常更新的表,其中包含2.4亿行(并且还在不断增长)。每三小时插入150万行,删除150万行。当我将群集移至SSD时,此批量插入(使用副本)的时间从22分钟减少到2.3分钟。删除时间也得到了改善。我计划每两个小时或每小时进行一次批量更新。 尽管现在的性能(在SSD之后)可以与更频繁的更新兼容,但我已经读到了一些有关由于有限的NAND耐久性和写入放大而导致SSD死亡的恐怖故事。由于固态硬盘价格昂贵,我想将其淘汰时间推向未来。因此,我的问题是:磁盘文件在删除和随后的清理中到底发生了什么?我猜有两个磁盘写操作,一个将行标记为已删除,另一个在清理时将其标记为可覆盖。如果不是在每个批量插入/删除操作中对创建和删除表进行分区而不是删除和清理,我将使SSD的磨损最小化吗?

1
为什么DELETE比SELECT慢得多,然后按ID进行DELETE?
我有一个非常繁忙的InnoDB表(200,000行,我猜每秒大概有几十个查询)。由于一个错误,我得到了14行,其中包含(相同)无效的电子邮件地址,并希望将其删除。 我只是尝试DELETE FROM table WHERE email='invalid address'了一下,并在大约50秒后得到了“超出了锁定等待超时”。这并不奇怪,因为未对行列进行索引。 但是,然后我做了SELECT id FROM table WHERE email='invalid address',那花了1.25秒。运行DELETE FROM table WHERE id in (...),从SELECT结果中复制粘贴ID,花费了0.02秒。 到底是怎么回事?有人可以解释为什么带有条件的DELETE这么慢以至于超时,但是执行SELECT然后按ID删除却是如此之快吗? 谢谢。 编辑:根据要求,我发布了表结构以及一些explain结果。我还应注意,没有任何外键引用此表。 但是,这种情况对我来说似乎很简单:我有一个未索引的字段可供选择。这需要扫描整个表,但是它并不大。id是主键,因此按ID删除应该是非常快速的。 mysql> show create table ThreadNotification2 \G *************************** 1. row *************************** Table: ThreadNotification2 Create Table: CREATE TABLE `ThreadNotification2` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `alertId` bigint(20) DEFAULT …

2
MySQL-删除具有外键约束且引用自身的行
我有一个表,用于存储用户在我的网站上发布的所有论坛消息。消息层次结构是使用嵌套集模型实现的。 以下是该表的简化结构: ID(主键) Owner_Id(对ID的外国主要参考) Parent_Id(对ID的外国主要参考) 左 好吧 级别 现在,表格看起来像这样: + ------- + ------------- + -------------- + ---------- + ----------- + ----------- + | Id | Owner_Id | Parent_Id | nleft | nright | nlevel | + ------- + ------------- + -------------- + ---------- + ----------- + ----------- + | 1 …


2
大型删除查询似乎已冻结
我们在具有18亿行的数据库上运行了删除查询。此删除操作将删除12亿行。 事后看来,我们会一次将这个查询分解为100m,但是我们处于一个已运行24小时且日志文件位于2Tb的位置,这似乎是日志文件允许的最大大小。 数据库处于SIMPLE恢复模式。 是否有保存此查询的内容?还是只需要重启SQL Server看看会发生什么?数据库将无法使用吗?我们有什么办法可以尽可能彻底地消除这种情况?

3
安全永久删除数据库的最佳实践是什么?
我们有一个“有机”的环境,这意味着人们在最少的监督或文档的情况下将代码堆积在代码上已有十年。我使用的服务器有几个我认为不再使用的数据库。我很想删除它们,只留下我实际使用的三个。 在极端鲁extreme的极端情况下,我可以禁用这些数据库并等待有人尖叫。在其他情况下,我可以让它们永远运行以防万一。您发现哪些步骤对确定服务器是否正在使用有价值,以及如何使用? 此外,您建议采取什么步骤来确保在禁用系统中不断发展,并在一段时间内保持可逆性(例如,重命名对象而不是直接删除它们)? 谢谢!

4
DELETE语句与REFERENCE约束冲突
我的情况如下所示: 表STOCK_ARTICLES: ID *[PK]* OTHER_DB_ID ITEM_NAME 表格位置: ID *[PK]* LOCATION_NAME 表WORK_PLACE: ID *[PK]* WORKPLACE_NAME 表INVENTORY_ITEMS: ID *[PK]* ITEM_NAME STOCK_ARTICLE *[FK]* LOCATION *[FK]* WORK_PLACE *[FK]* 显然,INVENTORY_ITEMS中的3个FK引用了其他表中的“ ID”列。 此处的相关表是STOCK_ARTICLE和INVENTORY_ITEMS。 现在有一个SQL作业,包含几个步骤(SQL脚本),这些步骤将上述数据库与另一个数据库(OTHER_DB)“同步” 。此作业中的步骤之一是“清理”。它会从STOCK_ITEMS中删除所有记录,而另一个数据库中没有对应的具有相同ID的记录。看起来像这样: DELETE FROM STOCK_ARTICLES WHERE NOT EXISTS (SELECT OTHER_DB_ID FROM [OTHER_DB].[dbo].[OtherTable] AS other WHERE other.ObjectID = STOCK_ARTICLES.OTHER_DB_ID) 但是此步骤始终失败: DELETE语句与REFERENCE约束“ FK_INVENTORY_ITEMS_STOCK_ARTICLES”冲突。数据库“ FIRST_DB”的表“ dbo.INVENTORY_ITEMS”的列“ …

3
批量删除后,我需要重新索引mysql表吗?
我在MySQL中有一张表,每秒钟都有很多INSERT和SELECT。每天都会一次删除一些较旧的数据。删除后是否需要重新索引表?我想提高性能。有人可以建议一些技巧吗?使用“ innodb”作为存储引擎。我需要更改吗?我认为并发插入和选择更好。请提出您的建议。我需要重新编制索引吗? 提前致谢..

3
从SQL表中删除数百万行
我必须从221+百万行表中删除16+百万条记录,并且运行非常缓慢。 多谢您分享建议,以加快以下代码的速度: SET TRANSACTION ISOLATION LEVEL READ COMMITTED; DECLARE @BATCHSIZE INT, @ITERATION INT, @TOTALROWS INT, @MSG VARCHAR(500); SET DEADLOCK_PRIORITY LOW; SET @BATCHSIZE = 4500; SET @ITERATION = 0; SET @TOTALROWS = 0; BEGIN TRY BEGIN TRANSACTION; WHILE @BATCHSIZE > 0 BEGIN DELETE TOP (@BATCHSIZE) FROM MySourceTable OUTPUT DELETED.* INTO MyBackupTable …

2
MySQL:delete…where..in()vs delete..from..join,并使用subselect锁定删除表
免责声明:请原谅我缺乏数据库内部知识。它去了: 我们运行的应用程序(不是我们编写的)在数据库的定期清理作业中存在很大的性能问题。查询如下所示: delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); 直截了当,易于阅读和标准SQL。但不幸的是非常缓慢。对查询进行解释说明VARIABLE_SUBSTITUTION.BUILDRESULTSUMMARY_ID未使用现有索引on : mysql> explain delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( -> select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY -> where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); | id | select_type | table | type | possible_keys | key …

4
如何提高InnoDB DELETE性能?
因此,我有此审核表(跟踪数据库中任何表上的操作): CREATE TABLE `track_table` ( `id` int(16) unsigned NOT NULL, `userID` smallint(16) unsigned NOT NULL, `tableName` varchar(255) NOT NULL DEFAULT '', `tupleID` int(16) unsigned NOT NULL, `date_insert` datetime NOT NULL, `action` char(12) NOT NULL DEFAULT '', `className` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `userID` (`userID`), KEY `tableID` (`tableName`,`tupleID`,`date_insert`), KEY …

3
在MySQL中批量删除大型表
我有一个Notification表,其中包含1000个IOPS的Amazon RDS中的大约1亿行主机,我想删除一个月以上的行。 如果这样做DELETE FROM NOTIFICATION WHERE CreatedAt < DATE_SUB(CURDATE(), INTERVAL 30 day);,将使用所有IOPS,整个过程将花费数小时,并且由于“超出了锁定等待超时;尝试重新启动事务”,因此无法插入许多新条目。 我试图按照此处描述的方式进行操作:http : //mysql.rjweb.org/doc.php/deletebig 但是,我使用的是UUID而不是增量ID。 在不影响正在插入/更新的新数据的情况下,删除这些行的正确而有效的方法是什么?

2
正确地删除Oracle实例
我想删除在AIX 6.0 OS中创建的oracle实例(oracle 10.2.0.4.0)。我知道我可以删除终端中的所有dbf和ctl文件,但是我认为这不是最好的方法。我认为这一定是一种更清洁的方法。 提前致谢。

3
删除所有重复项
我正在尝试删除所有重复项,但仅保留单个记录(较短的ID)。以下查询会删除重复项,但要进行大量迭代才能删除所有副本并保留原始副本。 DELETE FROM emailTable WHERE id IN ( SELECT * FROM ( SELECT id FROM emailTable GROUP BY email HAVING ( COUNT(email) > 1 ) ) AS q ) 它的MySQL。 编辑#1 DDL CREATE TABLE `emailTable` ( `id` mediumint(9) NOT NULL auto_increment, `email` varchar(200) NOT NULL default '', PRIMARY KEY (`id`) …
8 mysql  query  delete 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.