2012-02-19 11 views
-1

を実行する場合、私はあなたが形式のシンプルなテキストエリアを使用してDBからquerysを実行することができますWebアプリケーションを持っています。PHPのチェックmysqlのクエリが

それは(そう、それは私のサーバーがクラッシュすることはありません)を実行する前に、私は、クエリのメモリ消費量をチェックする必要があります:私は1つの問題があります。

それを行うにはPHPやMySQLを使用した方法はありますか?

ニュース(idNews、作成、idMedio、状態) NewsAreaMain(idNewsAreaMain、idNews、idAreaMain) AreaMain(idAreaMain)

例えば、私は3つのテーブルを持っています誰かが実際にサーバーをクラッシュさせた次のクエリを試してみました。

SELECT DISTINCT News.* 
FROM NewsAreaMain, News 
WHERE 
    (
     (
      NewsAreaMain.idNews=News.idNews 
      AND News.idNews IN 
       (
        SELECT DISTINCT News.idNews 
        FROM News, NewsAreaMain 
        WHERE NewsAreaMain.idNews=News.idNews 
        AND NewsAreaMain.idAreaMain="1" 
       ) 
     ) 
    AND idMedio="5" 
    OR (idMedio="6") 
    ) 
AND News.state=1 
ORDER BY created DESC 
LIMIT 0, 20; 
+0

わかりません。ユーザーがデータベースを変更することを信頼するようにしてください。 –

+0

任意のユーザー入力クエリの実行を許可しますか?それは素晴らしいアイデアのようには聞こえません。 –

+0

これはちょっと怖いですね、あなたはどんな方法でもユーザーの問い合わせを制限して清掃しているのですか、フリーテキストのSQLを入力できるのですか? – okyanet

答えて

2

私が知っているわけではありません。もし存在すれば、そこにある共有ホスティングサイトはすべてそれを使用し、あまりにも長いクエリを殺すような汚いメソッドを使うのではなく、あまりに集中的なクエリをブロックすることは確信しています。

おそらくあなたの唯一のオプションになり

SHOW PROCESSLISTの最初のエントリを定期的にチェックするプロセスがあります。「時間」が一定値を超えている場合(秒単位であるため、10の場合は大丈夫です)、60を超えるものは問題ありません。それはKILL QUERY #####となります(SHOW PROCESSLISTの一部として返される関連ID番号を使用)。

+0

を実行することができますどのような制限されます、ありがとう! –

0

ませmysqlのクエリは、サーバがクラッシュしないはずです。 Mysqlはそれでかなり良いです。
これはクエリではないようですが、コードによっては実際にサーバーがクラッシュすることがあります。
「クラッシュするサーバー」の詳細については、解決策があると確信しています。

+0

はここに何が起こったのです。 BD: ニュース(idNews) NewsAreaMain(idNewsAreaMain、idNews、idAreaMain) AreaMain(idAreaMain) QUERY:DISTINCTニュースを選択 * NewsAreaMain、ニュース FROM \t( \t ( \t( \t、IN \t NewsAreaMain.idNews = News.idNews とNews.idNewsニュース、NewsAr FROM DISTINCT News.idNews を選択eaMain WHERE NewsAreaMain.idNews = News.idNews AND NewsAreaMain。idAreaMain = "1" ) \t \t) \t AND idMedio = "5" OR(idMedio = "6") ) AND News.state作成DESC LIMIT 0、20 BY = 1 ORDER。 –

+0

そう?それはクエリです。しかし、どのようにそれが記憶上の問題であることを知っていますか? –

+0

ログをチェックすると、mySQLのメモリピークが赤色になり(i.veが質問を更新したので、クエリが読みやすくなります) –