0

次のストアド プロシージャがあります。

CREATE PROCEDURE testProc(IN p_idProject INTEGER)
BEGIN
DECLARE nowTime DATETIME;
SET @nowTime = NOW();

     SELECT 
         idCustomer 
     FROM NextCalls WHERE @nowTime-nextCall = 
         (SELECT MAX(@nowTime - nextCall) 
          FROM NextCalls 
          WHERE idProject = p_idProject AND nextCall < @nowTime) 
     LIMIT 1;
END $$

列にインデックスが設定されてnextCallいます。残念ながら、mysql-slow.logインデックスを適切に使用していないクエリとしてファイルに記録されています。この手順は非常に頻繁に使用されるため、不適切なインデックス作成を回避できれば幸いです。それを達成するために書き直すことは可能ですか?

4

1 に答える 1

0

最も古い nextCall を選択しているだけです。計算を実行する必要はありません。次を使用できますORDER BY

SELECT idCustomer 
FROM NextCalls 
WHERE idProject = p_idProject AND nextCall < CURRENT_TIMESTAMP
ORDER BY nextCall
LIMIT 1
于 2012-06-29T09:45:42.500 に答える