select a.Name from rat. Assessment a where a.AssessmentId = '3'
select a.Name from rat. Assessment a where a.AssessmentId = 3
パフォーマンスの違いは何ですか?最初のものは遅いですか?
SQLサーバーが列または値を列タイプまたは値タイプと一致するようにキャストしたかどうかを知るにはどうすればよいですか?
実行計画を見ました。よくわからない。
select a.Name from rat. Assessment a where a.AssessmentId = '3'
select a.Name from rat. Assessment a where a.AssessmentId = 3
パフォーマンスの違いは何ですか?最初のものは遅いですか?
SQLサーバーが列または値を列タイプまたは値タイプと一致するようにキャストしたかどうかを知るにはどうすればよいですか?
実行計画を見ました。よくわからない。
使用しているデータベース、関連するタイプが何であるかを知らなければ、それを言うのは簡単ではありません。
多くのデータベースは、定数型を列型に一度変換/キャストしようとするため、ディスクから各行を読み取るときに変換する必要はありません。しかし、それが起こったときに、これが起こるという保証はありません。
ただし、すべてのデータベースがタイプを一致させようとするわけではありません。そのため、一部のユーザーでは、エラーが発生したり、結果が得られなかったりします(数値が文字列ではないため、クエリが実際には何にも一致しないため)。
これは両方とも機能しますが、のデータ型AssessmentID
が数値の場合、2番目のクエリはキャストが不要であるため高速ですが、最初のクエリではサーバーが最初に値を数値にキャストする必要があります。
1つ目は、パフォーマンスのオーバーヘッドがある型キャスト(AssessmentIDが数値データ型であると想定)が必要です。この場合は無視できますが、より複雑なクエリではパフォーマンスに違いが生じる可能性があります。場合によっては、型キャストを行う必要がある場合、MySQLはインデックスを効率的に使用できません。