3

MySQLでCALLこの proc をLOADING...実行すると、サーバーが表示されるだけでなく、フリーズすることさえあります。

delimiter $$
CREATE PROCEDURE MyProc(IN index1 INT, IN count1 INT, IN index2 INT, IN count2 INT)
BEGIN
    SELECT id FROM view1 WHERE column1 IS NULL OR column1 = 1 ORDER BY dateColumn DESC LIMIT index1, count1;
    SELECT id FROM view1 WHERE column2 = 0 ORDER BY column3 DESC LIMIT index2, count2;
END$$
delimiter ;

いずれかSELECTの s しか持っていない場合、それは機能します。

私が見逃している/間違っていることを誰か知っていますか?

よろしくお願いします!

詳細

データベースへの接続をそれほど多くする必要がないように、PHP 用の proc を作成しています。PHP で簡単に使用できるように、それぞれSELECTが列情報を含む独自の結果セットである必要があります。

私のサイトは動的なページネーションに大きく依存しているため、少し余分な速度が必要です。

4

2 に答える 2

1

あなたがしていることは非常に賢明です。これは、最近修正された可能性のあるphpmyadminの欠陥のように見えます。この場合、複数の結果セットを返すストアドプロシージャが適切に処理されませんでした。

http://sourceforge.net/tracker/?func=detail&atid=377408&aid=3474853&group_id=23067

于 2012-12-29T06:02:22.420 に答える
0

これを試して:

DELIMITER $$
CREATE PROCEDURE MyProc(IN index1 INT, IN count1 INT, IN index2 INT, IN count2 INT)
BEGIN
    SET @s = CONCAT('SELECT id FROM view1 WHERE column1 IS NULL OR column1 = 1 ORDER BY dateColumn DESC LIMIT ', index1, ', ', count1);
    SET @s1 = CONCAT('SELECT id FROM view1 WHERE column2 = 0 ORDER BY column3 DESC LIMIT ', index2, ', ', count2);
    PREPARE stmt FROM @s;
    PREPARE stmt1 FROM @s1;
    EXECUTE stmt;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt;
    DEALLOCATE PREPARE stmt1;
END$$
DELIMITER ;
于 2012-12-29T05:30:03.500 に答える