mysql:13862
From: <ml@xxxxxxxxxx>
Date: Fri, 13 Apr 2007 09:26:06 +0900
Subject: [mysql 13862] マトリックステーブルの作成方法
上田です。 5.0.37-max MySQL Community Edition を使用しています。 あるテーブル同士のマトリックステーブルの作成方法を探しています。 以下のテーブルがあります。 CREATE TABLE user ( genre INT NOT NULL, number INT NOT NULL, unit INT NOT NULL, PRIMARY KEY(genre,number) ); CREATE TABLE user_skill ( genre INT NOT NULL, number INT NOT NULL, seq INT NOT NULL, line INT NOT NULL, value INT NOT NULL, PRIMARY KEY(genre,number,seq) ); CREATE TABLE matrix ( genre_1 INT NOT NULL, genre_2 INT NOT NULL, genre_3 INT NOT NULL, sum_unit INT NOT NULL, PRIMARY KEY(genre_1,genre_2,genre_3) ); CREATE TABLE matrix_skill ( genre_1 INT NOT NULL, genre_2 INT NOT NULL, genre_3 INT NOT NULL, seq INT NOT NULL, line INT NOT NULL, sum_value INT NOT NULL, PRIMARY KEY(genre_1,genre_2,genre_3,seq) ); データは以下のようになります。 user 1,1,100 1,2,200 1,3,300 2,1,0 2,2,10 2,3,10 3,1,1000 3,2,100 user_skill 1,2,1,1,10 1,2,1,2,20 1,3,1,1,10 2,1,1,1,-1 3,2,1,2,10 userはgenreとnumberで識別され、0個以上のuser_skillを持ちます。 genreは1-3の値を持ちます。 user_skillはlineで種別、valueで値を持ちます。 これらのデータのマトリックスをmatrixおよびmatrix_skillテーブルに導入した く思います。 マトリックスを作るルールは userのgenreで絞込みgenreが1-3のそれぞれの種類のuserを全組み合わせる。 matrixのgenre1-genre3にはuserのnumberが入る matrixのsum_unitにはgenre1-genre3のuserのunitのsumが入る matrix_skillはgenre1-genre3のuserのuser_skillをまとめて入れる matrix_skillのlineはuser_skillのline、sum_valueはuser_skillのvalueのsum が入る となります。 単純にuser同士のマトリックスならばuser同士をjoinしてINSET -- SELECT で SQL一発で作れそうなのですが、user_skillがあるので頭を悩ませています。 実際のテーブルではもう少し複雑な条件で組み合わせる必要があり、全組み合わ せが2兆通りほどになる見積もりになっています。 試しにスクリプトで組み合わせを作成して動かしてみると、終了までざっと3年 ぐらいかかりそうになったので早々に止めました。 そのときのCPU使用率を確認するとスクリプト70%、mysqld30%となっていました ので、MySQLでクエリーだけで済ませればもう少しは早くなるのではないかと目 論んだ次第です。 おそらくプロシージャを作る必要があるのではと思われますが、形だけでもご教 授ください。
-> 13862 2007-04-13 09:26 [<ml@xxxxxxxxxx> ] マトリックステーブルの作成方法 13863 2007-04-13 13:33 ┗["F.Y" <fumi_sby@xxxx] 13949 2007-05-09 08:05 ┗[<ml@xxxxxxxxxx> ]