0

私は2つのテーブルを持っています。people16500 行、visits17000 行のテーブル。visitsにリンクする必要があるため、クエリに LEFT JOIN が含まれていますpeople。訪問記録のない人物記録がある場合、それらの訪問列は NULL になることを認識しています。

この単純なクエリは魔法のように機能します。

SELECT * FROM people LEFT JOIN visits ON people.id = visits.id_people;

しかし、返された行をカウントしようとすると、 MySQL が30 秒以上、またはkill するまでハング(またはカウント)します。これは本番環境では受け入れられません。

結果の行をカウントするために使用しようとしたさまざまな方法を次に示しますが、それらはすべて同じハング結果になります。

SELECT COUNT(*) FROM people LEFT JOIN visits ON people.id = visits.id_people;

SELECT SQL_CALC_FOUND_ROWS * FROM people LEFT JOIN visits ON people.id = visits.id_people;
SELECT FOUND_ROWS();

奇妙なのは、これらのメソッドが小さなテスト テーブル (5 行と 5 行) で正常に機能していることです。

誰でも助けることができますか?

4

1 に答える 1

1

新しい MySQL テーブルを作成する場合は、INDEX 用語を使用してインデックスを作成する列を指定できます。インデックスは、パフォーマンスを向上させるために MySQL テーブルで有効にできる特別なものです
http://www.databasejournal.com/features/mysql/ article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm
http://www.tutorialspoint.com/mysql/mysql-indexes.htmこれを見ると、多くのアイデアが得られます..

乾杯

于 2012-08-28T12:51:30.177 に答える