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

mysql:8565

From: ML account <ML account <ml@xxxxxxxxxx>>
Date: Wed, 07 Jan 2004 16:37:35 +0900
Subject: [mysql 08565] Re: count(*) の合計の仕方

 こんにちは。

zai <zai91210@xxxxxxxxxx>さんの
<20040107151326.36EC.ZAI91210@xxxxxxxxxx>
"[mysql 08561] Re: count(*)の合計の仕方"


 回答は出ていますが、一言だけ。

> MySQLは、集合演算子が非力だな〜と感じ、少し後悔をし始めていたところでし
> た。

 postgreやoracleやDB2は、確かに色々な操作が可能ですが、それは何のペナル
ティも無しに行えるものでは無いのです。非常に限定された機能しか持たない
SQLでも色々凝った書き方は出来ますが、それも何のペナルティも無しに行える
ものでは無いという点では同じです。

 今回の場合、対象のテーブルtable1は、

    create table table1 (item1 varchar(50),item2 varchar(50),
        code1 varchar(50),code2 varchar(50),code3 varchar(50),
        code4 varchar(50),code5 varchar(50))

の様な定義と考えます。この様なベタな構造ではなく、正規化した、

    create table table1 (id int,item1 varchar(50),item2 varchar(50))
及び
    create table table1b (id int,codono int,code varchar(50))

の形であれば、目的である集計のクエリは、

    select count(*) from table1b where between 'c555' and 'd998'

でOKとなります。

 ベタなテーブル構造は考えやすいという利点はあるものの、今回の様に同様の
意味を持つフィールドを集計する場合には、クエリが難しくなるというペナルティ
以外に、大量のレコードを含んだテーブルの場合には致命的に遅くなるという重
大なペナルティを背負い込む場合があります。

 もっとも、DBMSの限界、正確にはそれを操作するSQLなる言語の限界によって、
正規化したDB設計が最適解とは限らない現実はあります。実際に正規形ではなく
ベタなテーブルを敢えて使う場合もありますが、それは正規形を考慮しない事と
は違います。



    松枝知直    <tomom@xxxxxxxxxx>
            http://www.argus.ne.jp/~tomom/



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

      8558 2004-01-07 02:39 [zai <zai91210@xxxxxx] count(*) の合計の仕方                   
      8559 2004-01-07 04:59 ┣[UNO Shintaro <uno@xx]                                       
      8561 2004-01-07 15:29 ┃┗[zai <zai91210@xxxxxx]                                     
      8562 2004-01-07 15:56 ┃ ┣[<lavlav@xxxxxxxxxx> ]                                   
      8563 2004-01-07 16:00 ┃ ┃┗[<lavlav@xxxxxxxxxx> ]                                 
->    8565 2004-01-07 16:37 ┃ ┗[ML account <ml@xxxxx]                                   
      8566 2004-01-07 16:46 ┃  ┗[ML account <ml@xxxxx]                                 
      8564 2004-01-07 16:22 ┣[Kazuhiro Yoshida <mo]                                       
      8790 2004-02-14 01:48 ┗[zai <zai91210@xxxxxx] 機種の変更に伴う不具合                
      8791 2004-02-14 15:43  ┣[Seto <seto@xxxxxxxxx]                                     
      8792 2004-02-14 20:09  ┣[<konet218@xxxxxxxxxx]                                     
      8793 2004-02-15 03:21  ┃┗[zai <zai91210@xxxxxx]                                   
      8794 2004-02-15 03:43  ┃ ┣[<konet218@xxxxxxxxxx]                                 
      8816 2004-02-19 05:35  ┃ ┃┗[zai <zai91210@xxxxxx]                               
      8796 2004-02-15 06:28  ┃ ┗[Seto <seto@xxxxxxxxx]                                 
      8818 2004-02-19 06:35  ┃  ┗[zai <zai91210@xxxxxx]                               
      8795 2004-02-15 04:18  ┗[とみたまさひろ <tomm]                                     
      8817 2004-02-19 06:26   ┗[zai <zai91210@xxxxxx]                                   
      8819 2004-02-19 09:47    ┣[Seto <seto@xxxxxxxxx]                                 
      8820 2004-02-19 15:29    ┃┣[<lavlav@xxxxxxxxxx> ]                               
      8824 2004-02-19 21:12    ┃┃┗[zai <zai91210@xxxxxx]                             
      8823 2004-02-19 21:02    ┃┗[zai <zai91210@xxxxxx]                               
      8826 2004-02-19 21:57    ┃ ┗[bon <bon@xxxxxxxxxx>]                             
      8827 2004-02-20 02:19    ┃  ┗[zai <zai91210@xxxxxx]                           
      8821 2004-02-19 18:52    ┗[Hiroto Tsubaki <jak@]                                 
      8825 2004-02-19 21:46     ┗[zai <zai91210@xxxxxx] Re: 機種の変更に伴う不具合(大感謝)