2012-01-23 18 views
0

rtrimをSELECTに入れて再度GROUP BYに入れると、rtrimingが2回、selectで1回、グループで1回であるので、これは効率が悪いですか?例えば....SQL rtrim selectとgroup by

SELECT 
rtrim(people.FORENAME1)+ ' ' + rtrim(people.SURNAME)AS Full_Name, 

FROM 
my table 

GROUP BY 
rtrim(people.FORENAME1)+ ' ' + rtrim(people.SURNAME) 
+0

「GROUP BY」節でトリミングするのを避けて、@ JNKの答えに従ってsargableにするのに十分なはずの 'SELECT'節に入れておくといいでしょう。 (そして 'FROM'節のどこかに' people'テーブルを入れることを忘れないでください) –

答えて

3

は、それはおそらく一度だけの機能を実行していますが、それは非検索引数可能ですので、それは非効率的です。

関数を適用するので、オプティマイザはこれらのフィールドを参照する既存のインデックスを使用できません。関数が実行されるまで関数の結果を知らないので、テーブル内のすべての行を処理する必要があります。

+0

+1他の人のリファレンス 'SARG' =検索引数 – Yuck

+4

これはつまり...あなたはVARCHAR )データを処理するときにTRIMを必要としないように、CHAR()ではなくCHAR()でデータをトリミングしてください:) – MatBailie

+0

+1 @Dems - 両方のフィールドにインデックスを追加します:) – JNK