我有一个大约有30万行和30列的表。我怎样才能迅速把它清除掉?如果我执行DROP FROM MyTable查询,则需要很长时间才能运行。我正在尝试以下存储过程,基本上是在没有数据的情况下复制表,删除原始表,并将新表重命名为原始表:
USE [myDatabase]
GO
SET ANSI_NULLS_ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ClearTheTable]
AS
BEGIN
SET NOCOUNT ON;
SELECT * INTO tempMyTable FROM MyTable WHERE
我有一个表A,它由表B引用,也就是说A的模式如下所示:
Table A
(
id int,
name varchar,
)
而表B的模式是:
Table B
(
id int,
a_id int,
val int
)
我有一段在表B中创建记录的代码。但是,在争用条件(例如,两个并行事务)的情况下,我在该块中有一个条件失败,因此在表B中创建了两条记录,而不是一条。事务块看起来非常类似于此(在Rails中):
ActiveRecord::Base.transaction do
# a here is an ActiveRecord Object of Model A
我有两个过程,一个是通过从3个不同的表中选择和计算这些值来更新的一个列,这个过程每1分钟运行一次(24×7)。
另一个过程,通过从上面提到的3个表中的一个表中选择数据,将的结果插入到一个新的表中,这个过程每天早上运行一次。
问题是,当这两个过程在上午同时运行时,当其中一个事务持有特定密钥的锁时,会发现一个死锁。
如何避免这种情况?
update
table1 as p
right join table2 as a on a.col = p.col
left join table3 as b on a.col = b.col
and b.date = (select min(tdate) f
我正在尝试运行一个查询:
INSERT
INTO `ProductState` (`ProductId`, `ChangedOn`, `State`)
SELECT t.`ProductId`, t.`ProcessedOn`, \'Activated\'
FROM `tmpImport` t
LEFT JOIN `Product` p
ON t.`ProductId` = p.`Id`
WHERE p.`Id` IS NULL
ON DUPLICATE KEY UPDATE
`ChangedOn` = VALUES(`Changed
产品表: product_id (int),cat_id (int)。
查询:
SELECT * FROM products where cat_id IN()
具有1000000行的Product表
如果cat_id具有更多cat_id,如cat_id IN (2,3,4,5,6),则与cat_id IN (2)相比,执行查询需要更多时间。请给我适当的方式查询或任何数据库模式的变化。