次のクエリを検討してください。
select FEE_NUMBER
from CARRIER_FEE CF
left outer join CONTYPE_FEE_LIST cfl on CF.CAR_FEE_ID=cfl.CAR_FEE_ID and cfl.CONT_TYPE_ID=3
where CF.SEQ_NO = (
select max(CF2.SEQ_NO) from CARRIER_FEE CF2
where CF2.FEE_NUMBER=CF.FEE_NUMBER
and CF2.COMPANY_ID=CF.COMPANY_ID
group by CF2.FEE_NUMBER)
group by CF.CAR_FEE_ID
私のラップトップでは、これは結果を返しません。私のサーバーでまったく同じ(ダンプされた)データベースを使用すると、結果が返されます。
ラップトップでEXPLAINを実行すると、これが得られます
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+-------+---------------------------------------------+-----------------------+---------+------------------------+------+----------------------------------------------+
| 1 | PRIMARY | CF | index | NULL | PRIMARY | 8 | NULL | 132 | Using where |
| 1 | PRIMARY | cfl | ref | FK_CONTYPE_FEE_LIST_1,FK_CONTYPE_FEE_LIST_2 | FK_CONTYPE_FEE_LIST_1 | 8 | odysseyB.CF.CAR_FEE_ID | 6 | |
| 2 | DEPENDENT SUBQUERY | CF2 | ref | FK_SURCHARGE_1 | FK_SURCHARGE_1 | 8 | func | 66 | Using where; Using temporary; Using filesort |
私の他のすべてのサーバーではこれを提供します(ref列の違いに注意してください)
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+-------+---------------------------------------------+-----------------------+---------+------------------------+------+----------------------------------------------+
| 1 | PRIMARY | CF | index | NULL | PRIMARY | 8 | NULL | 132 | Using where |
| 1 | PRIMARY | cfl | ref | FK_CONTYPE_FEE_LIST_1,FK_CONTYPE_FEE_LIST_2 | FK_CONTYPE_FEE_LIST_1 | 8 | odysseyB.CF.CAR_FEE_ID | 6 | |
| 2 | DEPENDENT SUBQUERY | CF2 | ref | FK_SURCHARGE_1 | FK_SURCHARGE_1 | 8 | odysseyB.CF.COMPANY_ID | 66 | Using where; Using temporary; Using filesort |
結合、サブクエリ、または最後の group-by のいずれかを削除すると、期待どおりの結果が得られます。
これは構成の問題だと思いますが、これまでに見たことはありません。誰がこれを引き起こす可能性があるか知っていますか?
私のラップトップは、MySQL 5.0.41 で OSX 10.6 を実行しています。OSX 10.5.7 と MySQL 5.0.37 を実行している別のラップトップは正常に動作し、MySQL 5.0.27 を実行している Linux サーバーも同様です。
ref=func を使用した 1 つの説明計画と ref=odysseyB.CF.COMPANY_ID を使用した別の説明計画の違いを説明できる人はいますか?
ありがとう。