mysqlインデックス上でインデックスタイプ以外の値をクエリーすることによる遅いクエリー


問題が発生したsqlは次のとおりです.
SELECT column_name,comment,type_name,integer_idx FROM tmp_alipay_columns
WHERE sd_id=(SELECT CAST(cd_id as SIGNED) FROM tmp_alipay_sds WHERE sd_id=333 AND cd_id IS NOT null AND cd_id<>'' LIMIT 1)

tmp_alipay_sdsのsd_id列がvarcharタイプのインデックス
入力パラメータ333がintの場合、タイプが異なる
mysqlは暗黙的に変換され、sd_idと入力された値は浮動小数点数に変わります(‘1 a’,‘1’はいずれも1に変わります)
インデックスが使用できないことがわかり、テーブル全体をスキャンしました
tmp_alipay_sds行数600 W
このsqlを走る任務は大きな任務だ.
データベース・サーバ・カードの直接的な死
問題はボスに発見された
次回は新しいsql再構築や大きなテーブルクエリーに関連するたびに、必ずexplainを先に