标签: 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万
查看次数

mysql where count(column_name)= 1?

这是我正在使用的查询:

SELECT k_id, COUNT(k_id) AS k_count 
FROM template_keyword_link 
WHERE k_id IN(1,2,3,4,5)
GROUP BY k_id;
Run Code Online (Sandbox Code Playgroud)

此查询返回类似
1 |的内容 6
2 | 1
3 | 4
4 | 1
5 | 9

我想添加类似的东西AND COUNT(k_id) = 1 我最终得到
2 | 1
4 | 1

但是我无效使用组功能.

我该怎么做呢?


更新:

我的问题的另一部分是.

这可以用作删除语句吗?

就像是

DELETE FROM 
template_keyword_link tkl
LEFT JOIN keywords k
ON tkl.k_id = k.k_id
WHERE tkl.k_id 
IN(SELECT k_id, COUNT(k_id) AS k_count 
FROM template_keyword_link 
WHERE k_id IN(1,2)
GROUP BY k_id
HAVING k_count = 1);
Run Code Online (Sandbox Code Playgroud)

我明白了 …

mysql sql aggregate-functions mysql-error-1111 sql-delete

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

如果我在mysql中删除了一个删除查询,那么这些行都会被保存吗?

假设我正在运行导入的一半,而不是运行

SELECT COUNT(*) FROM table_being_imported
Run Code Online (Sandbox Code Playgroud)

我点击ctrl+ R,键入table_being_im并点击返回,只是为了发现我刚刚发布的恐怖事件

DELETE FROM table_being_imported
Run Code Online (Sandbox Code Playgroud)

哎呀.所以我点击ctrl+ C并得到告诉:

Ctrl-C -- sending "KILL QUERY 627" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted
Run Code Online (Sandbox Code Playgroud)

它会删除任何行吗?只是假设,当然......

mysql sql-delete

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

删除并加入多个表

码:

create table coltype (coltype varchar(5));

insert into coltype values ('typ1');

create table colsubtype (coltype varchar(5), colsubtype varchar(5));

insert into colsubtype values ('typ2', 'st1');
insert into colsubtype values ('typ2', 'st2');

create table table1 (col1 varchar(5), coltype varchar(5), colsubtype varchar(5));

insert into table1 values ('val1','typ1', 'st1');
insert into table1 values ('val2','typ1', 'st2');
insert into table1 values ('val3','typ1', 'st3');
insert into table1 values ('val4','typ2', 'st1');
insert into table1 values ('val5','typ2', 'st2');
insert into table1 values ('val6','typ2', 'st3');
insert into table1 values ('val7','typ3', …
Run Code Online (Sandbox Code Playgroud)

sql-server join sql-delete

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

是否可以在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的基本原理"无法在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
查看次数

删除多个重复项,在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
查看次数