0

リンクと呼ばれるテーブルがあり、そこには 50000 以上のレコードがあり、フィールドのうちの 3 つが 、 、 の順にインデックスを持っていlink_idます。org_iddata_id

ここでの問題は、group by sql クエリを使用しているときに、読み込みに時間がかかることです。

クエリはこのようなものです

SELECT DISTINCT `links`.* 
FROM `links` 
WHERE `links`.`org_id` = 2 AND (link !="") 
GROUP BY link

テーブルには20以上の列があります

アクセスを高速化するためにクエリを高速化するソリューションはありますか。

4

3 に答える 3

3

にインデックスを作成する(org_id, link)

org_idWHEREあなたの節を最適化するために、そしてlinkあなたのためにgroup by(そしてまたの一部のためにwhere)。

LINK_IDを最初の位置に置くことで、おそらくクエリが妨げられます。

create index LinksByOrgAndLink on Links ( Org_ID, Link );

MySQLのインデックス作成構文

于 2013-01-16T12:15:55.360 に答える
1

問題はあなたのDISTINCTにあります。*GROUPBYはすでにの作業を行っているので、1回 ともうDISTINCT1回の2回の個別の作業を行っています。SELECT DISTINCTGROUP BY

これを試して

    SELECT  * 
    FROM `links` 
    WHERE org_id` = 2 AND (link !="") 
    GROUP BY link
于 2013-01-16T12:22:31.777 に答える
0

'link'列にインデックスを追加すると、結果が改善されると思います。 http://dev.mysql.com/doc/refman/5.0/en/create-index.html

必要な列のみを選択してください。

linksなぜ。*の区別があるのですか?テーブルに正確に2倍になった行がありますか?

一方、値 ""をNULLに変更すると、selectステートメントが改善される可能性がありますが、iamはこれについて確信がありません。

于 2013-01-16T12:22:29.603 に答える