考慮下面的查詢:MySQL的解釋異常
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
在我的筆記本電腦這個不返回任何結果。在我的服務器上使用完全相同的(轉儲)數據庫,它會返回結果。
如果我跑我的筆記本電腦的解釋,我得到這個
| 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 |
而我所有的其他服務器也給出了這樣的(注意裁判列的差異)
| 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 |
如果我刪除連接,子查詢或最後一組 - 然後我得到預期的結果。
我假設這是一個配置問題,但它不是我以前見過的。有人知道可能會導致這種情況嗎?
我的筆記本電腦在運行MySQL 5.0.41的OSX 10.6。另一臺運行OSX 10.5.7和MySQL 5.0.37的筆記本電腦運行良好,運行MySQL 5.0.27的Linux服務器也是如此。
任何人都可以解釋一個解釋計劃使用ref = func和另一個使用ref = odysseyB.CF.COMPANY_ID之間的區別嗎?
謝謝。
哇!相同的數據集?不同的結果?這是一個非常嚴重的問題... – 2009-09-07 18:24:10
是的。相同的數據集。不同的結果。不好。 – Damo 2009-09-07 18:29:25
你確定它是相同的數據集嗎?你的解釋中的行有點不同。201 vs 202 16 vs 18 100 vs 101 – Rufinus 2009-09-07 20:13:44