标签: sql-delete

sql server delete被索引大幅减速

我正在运行一个归档脚本,它根据输入的日期从大型(~50m记录DB)中删除行.日期字段是表上的聚集索引,因此我正在应用我的条件语句.

我在while循环中运行此删除,尝试批量处理1000到100,000条记录.无论批量大小,它都非常缓慢; 像10,000条记录一样被删除一分钟.查看执行计划,"索引删除"花费了大量时间.表中大约有15个字段,其中大约有10个字段具有某种索引.有什么方法可以解决这个问题吗?我甚至不确定为什么每个索引删除都需要这么长时间,有人可以了解到这里发生了什么?这是我执行计划的一个示例:

alt text http://img94.imageshack.us/img94/1006/indexdelete.png

(序列指向删除命令)

这个数据库是实时的,并且经常被插入,这就是为什么我对使用修剪大小的复制和截断方法犹豫不决.我在这里还有其他选择吗?

sql-server optimization stored-procedures sql-delete

5
推荐指数
2
解决办法
1万
查看次数

从多个条件中删除

我在DELETE MySQL语句中有两个条件.但它不会删除记录.

$sql="DELETE * FROM sportevent.event_registrations WHERE event_registrations.id = '$id' AND event_registration.eventname = $event";
Run Code Online (Sandbox Code Playgroud)

我的查询有问题吗?如果我只使用一个WHERE条件,它可以工作,但我需要使用两个.

php mysql sql-delete

5
推荐指数
1
解决办法
8965
查看次数

是否可以在MYSQL上的表上禁用删除?

我正在使用MySQL 5.0,我想知道是否有办法禁用表上的删除.如同,不能让任何用户从平板电脑中删除任何内容,只更新和插入.

php mysql sql-delete

5
推荐指数
3
解决办法
4353
查看次数

使用INNER JOIN删除PostgreSQL错误

Postgres 8.4

DELETE
FROM processing_transaction AS pt 
INNER JOIN processing_transaction_movement AS ptm 
ON pt.processing_transaction_id = ptm.processing_transaction_id
LEFT OUTER JOIN test_package tesp ON pt.test_package_id = tesp.test_package_id
LEFT OUTER JOIN test_batch tbat On tesp.test_batch_id = tbat.test_batch_id
WHERE pt.processing_transaction_type = 'TEST';
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误:语法错误>> INNER << LINE 1:DELETE FROM processing_transaction AS pt INNER JOIN processi ...

请问你能帮我找到我的SQL查询中的错误


感谢您的支持@desislavkamenov @jan.现在我用这个:

开始工作;

DELETE FROM processing_transaction AS pt USING processing_transaction_movement AS ptm,test_package tesp,test_batch tbat WHERE pt.processing_transaction_type ='TEST'; AND pt.processing_transaction_id = ptm.processing_transaction_id AND pt.test_package_id = tesp.test_package_id AND tesp.test_batch_id …

sql postgresql cascading-deletes sql-delete

5
推荐指数
1
解决办法
9444
查看次数

PHP MySQL删除父行和子行

我有1个MySQL表.它看起来像这样:

+---------+-------------+--------+
| item_id |  parent_id  |  Name  |
+---------+-------------+--------+
|   1     |     0       |  Home  |
+---------+-------------+--------+
|   2     |     1       |  Sub   |
+---------+-------------+--------+
|   3     |     2       | SubSub |
+---------+-------------+--------+
Run Code Online (Sandbox Code Playgroud)

如果我删除item_id 1,我想删除子的其余部分,但我该怎么办呢?

我已经尝试过外键但只有你有2个表才有效吗?

我希望有人可以帮助我在MySQL中使用PHP吗?

mysql children parent sql-delete

5
推荐指数
1
解决办法
3210
查看次数

尝试在不存在时删除不起作用.主键中有多列

我目前正在尝试从表A中删除表B中未使用相应记录的情况.表A包含Section,SubSection,Code,Text作为字段,其中前三个是主键.表B将ID,Section,SubSection,Code作为字段,其中所有四个都是主键.有更多的列,但它们与这个问题无关...只是想在我被问及为什么所有列都是表B的主键的一部分之前指出它.很多表A是所有可能数据的存储库可以分配给实体,表B是它们被分配的位置.我想删除表A中未在表B中使用的所有记录.我尝试了以下操作但没有成功:

DELETE FROM Table A 
WHERE NOT EXISTS (SELECT * from Table B 
WHERE A.section = B.section
AND A.subsection = B.subsection
AND A.code = b.code)
Run Code Online (Sandbox Code Playgroud)

如果我执行Select而不是删除,我会得到我要查找的子集,但是当我执行删除时,我得到一个错误,表示表A中存在语法错误.我会使用NOT IN语句,但是多列是主键的一部分,我只是看不出它是如何工作的.任何帮助将不胜感激.

sql exists not-exists sql-delete

5
推荐指数
2
解决办法
1万
查看次数

无法截断MySQL表,同时能够删除所有记录

我是一个非常初衷的关系,所以这可能听起来很愚蠢.但是,在截断表和删除所有记录之间(在MySQL中)有什么区别(这个答案仅说明性能)?

我正在玩(在phpMyAdmin中)我的一个测试表,要检查,如何重置auto_increment表的值并运行到情境,我能够删除所有记录:

DELETE from managers;
Run Code Online (Sandbox Code Playgroud)

但是当我试图截断这个表(TRUNCATE managers)时,我得到了警告:Cannot truncate a table referenced in a foreign key constraint (probes, CONSTRAINT probes_ibfk_4 FOREIGN KEY (manager_id) REFERENCES managers (id));.

我必须用"重置" auto_incrementALTER TABLE managers AUTO_INCREMENT = 1;.

这不奇怪吗?到目前为止,我想,那TRUNCATE= DELETE from managers(在检查和效果方面,因为性能可能不同,但这不是关键).

如何弹出约束警告TRUNCATE而不是"全部删除"?

mysql truncate constraints phpmyadmin sql-delete

5
推荐指数
1
解决办法
3435
查看次数

MySQL的基本原理"无法在FROM子句中指定更新的目标表"

在MySQL中,如果我正在执行一个DELETEUPDATE在同一个表上,我不能在谓词中重用表.例如,这是不可能的:

DELETE FROM story_category WHERE category_id NOT IN (
--          ^^^^^^^^^^^^^^ deleting from this table...

SELECT DISTINCT category.id FROM category 
       INNER JOIN story_category ON category_id=category.id);
--                ^^^^^^^^^^^^^^ ... prevents using the same table in predicates
Run Code Online (Sandbox Code Playgroud)

上面的例子来自这个Stack Overflow问题,其中接受的答案和许多其他答案指出,通过将子查询嵌套到另一个子查询中以使MySQL无法识别表重用,可以使用一种技巧:

DELETE FROM story_category
--          ^^^^^^^^^^^^^^
WHERE category_id NOT IN (
    SELECT cid FROM (
        SELECT DISTINCT category.id AS cid FROM category 
        INNER JOIN story_category ON category_id=category.id
--                 ^^^^^^^^^^^^^^ apparently no longer considered the same table
    ) AS …
Run Code Online (Sandbox Code Playgroud)

mysql sql sql-update sql-delete

5
推荐指数
1
解决办法
256
查看次数

MySQL:截断表与从表中删除

我们什么时候使用DELETE命令与TRUNCATE命令?我试图在互联网上找到但两个命令都删除了数据; 我无法区分.

mysql sql database truncate sql-delete

5
推荐指数
1
解决办法
3783
查看次数

删除多个重复项,在sql中保留最大ID

我有一个包含大量重复量的数据库,每有一个独特的ID,但它们的PermitIDEncID是相同的.我需要删除数据库中除最高ID之外的所有ID.

sql语句,

DELETE FROM tblInvoices 
WHERE EncID = '0237' AND PermitID IN (
SELECT Max(ID) FROM tblInvoices Group BY PermitID)
Run Code Online (Sandbox Code Playgroud)

删除所有记录.我试过了

DELETE FROM tblInvoices 
WHERE EncID = '0237' AND PermitID 
< (SELECT Max(ID) FROM tblInvoices Group BY PermitID)
Run Code Online (Sandbox Code Playgroud)

但我收到错误 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

数据的一个例子是

ID    PermitID    EncID
1 …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008 sql-delete

5
推荐指数
1
解决办法
3789
查看次数