私は2つのテーブルに左の結合ステートメントを持っています:tbl1は約100万レコード、tbl2は約2000万です。クエリの実行に約9秒かかります。私は両方にインデックスを持っていますが、クエリーの時間の長さを考えれば、何かが正しく見えません。ここに私のselect文は次のとおりです。私のデータベースやクエリを何とか高速化する必要があります
EXPLAIN SELECT * FROM (SELECT tbl1.id, tbl1.name, tbl2.addr FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id WHERE tbl1.name LIKE 'G%' AND tble2.addr IS NOT NULL) as tempTable GROUP BY id LIMIT 10;
+----+-------------+------------+--------+------------------+--------------+---------+----------------|
id|select_type| table |type |poss_keys|key |key_len|ref | rows | Extra
+----+-------------+------------+--------+------------------+--------------+---------+----------------
1 | PRIMARY | <derived2>|system| NULL |NULL| NULL |NULL | 0 | const row not found |
2 | DERIVED | tbl1 |range |id,name |name| 903 |NULL | 1 | Using where |
2 | DERIVED | tbl2 |ref |id,addr |id | 4 |tbl2.tbl1.id| 25 | Using where |
+----+-------------+------------+--------+------------------+--------------+---------+----------------
UPDATE: 私は結合文&を取る場合は、単にselect文は(も1秒未満)に高速である個別TBL1から、またはTBL2からレコードを選択するが、私は参加しようとすると、彼らはそれをonsiderably遅く...私はそれらを正しく結合するか、私は結合のための特別なインデックスのいくつかの種類が必要ですか?あなたは少しそれを簡素化するかもしれない
1.なぜネストされたクエリが必要ですか? 2.なぜLEFT JOINを使うのですか? 3.テーブル構造はどこにありますか? – zerkms
左結合は、2つのテーブルを結合するために使用されます。私はテンポラリテーブルは必要ないと思うが、文を変更してもクエリにはまだ長い時間がかかります –