[前][次][番号順一覧][スレッド一覧]

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]