2009-11-20 87 views
0
上的简单更新

我正在运行以下查询存储过程中,它需要30毫秒执行。谁能帮我优化这个查询:优化表

表定义是:

Create Table Customer 
(
    CustID int not null auto_increment, 
    CustProdID int, 
    TimeStamp DateTime, 
    primary key(CustID) 
); 

Update Customer 
Set TimeStamp = InputTimeStamp (stored procedure's Input) 
Where CustID = InputCustID (stored procedure's Input) 
and CustProdID = InputCustProdID; (stored procedure's Input); 

而且除了主索引这个表有custprodID列简单索引。

在此先感谢。 问候, 玛纳斯

+0

对于所有问题的答案我已经在更新开始之前和完成Updation之前在我的存储过程中放入了调试语句的时间戳记。 正如我前面提到的,这些列有索引。 – 2009-11-20 12:23:58

回答

0

我不知道有多少真,同时保持相同的功能,你可以在这里改变;这是一个非常基本的查询。

0

我的猜测是时间不在存储过程中,而是在调用它的代码中(加上网络开销等)。

+0

这是我从mysql命令行调用过程的时间 – 2009-11-20 12:25:01

+1

使用您的应用将使用的相同代码运行一百万次。这将为您估计需要多长时间提供良好的基础。 – 2009-11-20 15:04:08

1

你怎么测量30ms?如果通过运行一次程序,结果将会被运行测试的开销所淹没。把它放在一个循环中,做1000次,然后将结果除以1000,那么你会得到什么?

0

当你说30毫秒时,cpu时间还是整体性能时间?你知道有多少条记录正在更新(我猜根据这个例子一个小数字,但不确定)。此外,表是否有触发器,所以更多的工作正在完成比满足眼睛...

我同意,这是一个简单的查询,所以没有太多优化它。您可能想要在两个字段上放置聚簇索引,但我不知道这对您的应用程序是否合适。

0

您可以尝试使用(CustID,CustProdId)上最左侧的前缀索引。