Mysql Force Indexは機能せず、IGNORE INDEXで置き換えます

3718 ワード

表author_rは100 W程度のデータがあり、テーブルには複数のインデックスがある:1.Inx_SNS_Website_Code(SNS_Website_Code) 2. Inx_Pair_Author_Raw_ID(Pair_Author_Raw_ID) 3. Inx_Author_RawID(Author_Raw_ID) 4. Inx_Time_S_Code_RType_RawID(Extracted_Time,SNS_Website_Code,R_Type,Author_Raw_ID,Pair_Author_Raw_ID)の下のSQLでのクエリ結果は300件:1である.インデックス付きInx_Author_RawID,Inx_Pair_Author_Raw_IDが一番速いです.デフォルトではInx_SNS_Website_Codeインデックス、特に遅い.3.デバッグ:強制インデックスForce Index(Inx_Time_S_Code_RType_RawID)を設定します.EXPLAINはインデックスがないことを発見しました.つまり、強制が成功しない場合、強制インデックスを強制します.Author_RawID, Inx_Pair_Author_Raw_IDインデックスも成功しなかった.後にIGNORE INDEXがあることが判明し、IGNORE INDEX(Inx_SNS_Website_Code)を試したところ、インデックスはInx_Time_S_Code_RType_RawID、速度はやはりとても遅くて、原因は時間のスパンが大きすぎるためです.最後のIGNORE INDEX(Inx_SNS_Website_Code,Inx_Time_S_Code_RType_RawID)、インデックス付け(Inx_Author_RawID、Inx_Pair_Author_Raw_ID)は、高速である.疑問:なぜForce Indexが成功しないのか分からない.知っている友达に教えてください.
SELECT ar.* FROM `author_r` ar IGNORE INDEX(Inx_SNS_Website_Code,Inx_Time_S_Code_RType_RawID)

WHERE 1=1 

and ar.Extracted_Time BETWEEN str_to_date('1970-11-01 00:00:00','%Y-%m-%d %H:%i:%s') and str_to_date('2012-11-28 23:59:59','%Y-%m-%d %H:%i:%s') 

and ar.SNS_Website_Code='TW' and ar.R_Type in ('F','I','R','LL')

and (  

    Author_Raw_ID in ('tw_tabelogcospe') 

    or Pair_Author_Raw_ID in ('tw_tabelogcospe')

)

order by Pair_Name asc limit 300;