1

/tmpサイトがmysqlディレクトリを非常に速く埋めているように見える場所で作成しなかったスクリプトでいくつかの問題を修正しようとしています。

を確認したslow query logところ、このようなクエリがたくさんあります。

SELECT
    COUNT(*) AS `total`
FROM
    (
        SELECT
                *
        FROM
            `Advertising_Business_and_Retail`
        WHERE
            MATCH (`wm`, `locn`, `gns`) AGAINST('outdoor apparel company')
    UNION
        SELECT
                *
        FROM
            `Chemical` WHERE MATCH (`wm`, `locn`, `gns`) AGAINST('outdoor apparel company')
    UNION
        SELECT
                *
        FROM `Clothing` WHERE MATCH (`wm`, `locn`, `gns`) AGAINST('outdoor apparel company')
    )
AS t;

45合計でユニオン(カテゴリテーブルごとに1つ)を信じていることを除いて、これらのテーブルは巨大ではありませんが、Advertising_Business_and_Retailテーブル450k自体にリストがあります。

このクエリを手動で実行したところ、約2分半かかりました。

これが/tmpディレクトリが非常に速くいっぱいになる理由だと思いますか?

問題を解決するために私ができることに関するヒントはありますか?

4

2 に答える 2

1

選択している行の間に重複がないことが確実にわかっている場合は、に置き換えUNIONてみてくださいUNION ALL

UINON ALLさらに、単純な追加で置き換えることもできます。

select (
  (select count(1) from `Advertising_Business_and_Retail` WHERE MATCH (`wm`, `locn`, `gns`) AGAINST('outdoor apparel company'))
+ (select count(1) from `Chemical` WHERE MATCH (`wm`, `locn`, `gns`) AGAINST('outdoor apparel company'))
+ (select count(1) from `Clothing` WHERE MATCH (`wm`, `locn`, `gns`) AGAINST('outdoor apparel company'))
) as total
于 2012-05-11T09:27:09.883 に答える
1

これはもっと速いですか?

SELECT
    SUM(`count`) AS `total`
FROM
    (
        SELECT
               COUNT(*) AS `count`
        FROM
            `Advertising_Business_and_Retail`
        WHERE
            MATCH (`wm`, `locn`, `gns`) AGAINST('outdoor apparel company')
    UNION
        SELECT
               COUNT(*) AS `count`
        FROM
            `Chemical` WHERE MATCH (`wm`, `locn`, `gns`) AGAINST('outdoor apparel company')
    UNION
        SELECT
                COUNT(*) AS `count`
        FROM `Clothing` WHERE MATCH (`wm`, `locn`, `gns`) AGAINST('outdoor apparel company')
    )
AS t;
于 2012-05-11T09:27:45.610 に答える