2

データベースのテーブル カテゴリを考えてみましょう。列の種類は次のとおりです。データ型は値を持つ varchar です

         typeis
         ------
         2.5.1
         12
         1.1.1
         11
         letters12
         .........

"." を含むレコードのみを返すクエリを作成したいと考えています。および 0 ~ 9 の数字

例えば

         2.5.1
         1.1.1

これまでのところ、私は

       select typeis from category where typeis
       not in 
       (select typeis from category where typeis REGEXP  '[^0-9 \.]+')
       and typeis in
       (select typeis from category where typeis REGEXP  '^[0-9]+[\.]')

これはうまくいくようです。問題は、わずか 1500 レコードで 3 秒以上かかることです。入れ子になった select を使用する代わりに、REGEXP を 1 つだけ使用して、よりシンプルかつ高速にしたいと考えています。

4

2 に答える 2

6

試す:^[0-9]+\.[0-9]+(\.[0-9]+)*

これは、中央のどこかにドットを含む数字で始まり、数字で終わるもの、およびこれらのパターンを必要な数だけ一致させる必要があります。

于 2013-01-15T17:56:09.903 に答える
1

これは非常に簡単で強力です。

^([0-9]+\.*)+

クエリ時の問題は、インデックスが作成されていないことが原因である可能性があります。列のインデックスを作成してみてくださいtypeis- 可能であれば、その全長のインデックスを作成してください。たとえば、varchar(255) で長さ 255 のインデックスを作成した場合、次のようになります。

create index index_name on table_name (column_name(length))
于 2013-01-15T18:09:59.157 に答える