mysql:5783
From: 大杉眞規 <大杉眞規 <osugi@xxxxxxxxxx>>
Date: Thu, 11 Jul 2002 16:03:33 +0900
Subject: [mysql 05783] Re: 電話番号の検索
初めてメールします。大杉と言います。 Oracleの経験ですが、 > select * from tbl where replace(tel,'-','')='033456aaaa'; とするのは左辺加工( = の左側の項)といってオススメしない…とSIの人にに話 を聞いたことがあります。INDEXが無効化されてしまうとのことです。 > 手持ちのデータ(8千件)での所感ですが。 くらいであれば、パフォーマンスの劣化は体感できないかもしれません。ただ、 このようなコーディングを日常的にしているとクセになってしまうかもしれませ ん。 Oracleを使い始めた頃、左辺加工を組み込んだプログラムを作成したのですが、 パフォーマンスが非常に悪かったです。左辺加工をやめたらぐっと早くなりまし た。 ちなみにこんな感じでした。(カラムCは日付型で、不特定日の00:00:00が入って います) 【遅いパターン】 SELECT A FROM B WHERE TO_CHAR(C,'YYYYMMDD') = TO_CHAR(SYSDATE,'YYYYMMDD'); 【速いパターン】 SELECT A FROM B WHERE C = TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD'); SYSDATEを年月日のみの形式にテキストフォーマットして、それを年月日形式とし て日付型に変換してやると、余計な時間(HH24:MI:SS)が切り捨てられて、 SYSDATEの00:00:00にセットされます。このパターンだとご覧のように左辺が加工 されていない状態になっています。 遠藤さんのおっしゃるように、格納時に工夫をするのがベストだと思います。も ちろん、すでに運用されているDBで表の構成変更が難しいと言うことであれば、 > select * from tbl where replace(tel,'-','')='033456aaaa'; のようなコーディングになると思います。 おおすぎ
5779 2002-07-11 15:02 [ebihara <ebiharaml@x] 電話番号の検索 5780 2002-07-11 15:31 ┣[遠藤 俊裕 <endo_t@xx] 5781 2002-07-11 15:34 ┣["Yuya.Nishida." <yuy] 5782 2002-07-11 15:41 ┗["MIYATSU Kazunari" <] -> 5783 2002-07-11 16:03 ┗[大杉眞規 <osugi@xxx] 5784 2002-07-11 17:33 ┣["MIYATSU Kazunari" <] 5792 2002-07-12 13:27 ┗[ebihara <ebiharaml@x]