先日、サーバによってSELECT TOP 1 AA FROM T_TABLE(このときはORDERを入れていない)でWHILEで回すクエリの結果が異なることがあった。
なにが悪いのかさっぱりわからなかった。Aサーバで実行するときちんと出力されるが、Bサーバで出力すると出力件数が少ない。
メモリが足りないからとか負荷がかかったとか考えたが違った。
賢者に聞くと全件検索によるSELECTでORDERがないと出力順が変わることがあるらしい。しかも数万件の出力の場合はそれが顕著に現れるらしい。
必ずしも期待した結果になるかは不明らしいから気づかない。
そんなことがあるのかと、ORDERを指定すると、指定する前よりも時間がかかるが、どちらも正しい結果になった。
わお。たったそれだけだった。それがわかるのに2日かかった。聞けばすぐだけど、調べてから聞かないと聞かれた方も間違ったことを教えるかもしれないと躊躇するだろう。
だから聞くときは、どこまでを調べて、これから何を調べるかを説明して聞くことにしてる。そうすれば、何を助言すればよいか教える方もなにを伝えればよいかわかる。
結果として
SELECTで出力するときに、ORDER なしでもIDの昇順に出力される(ことがある)が、それはたまたまその結果が出力されただけであるので、きちんとORDERを指定する必要がある。