のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,296人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレMySQL 総合 Part15

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - insertall + - mregexp + - SSD + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    351 : NAME IS - 2009/01/28(水) 02:19:00 ID:??? (+59,+29,-38)
    むー
    結合したSQLで両テーブルともちゃんとインデックス使ってるじゃん
    これでどうして遅いんだ?
    limitしないと100万件とかヒットする巨大データとか?
    352 : NAME IS - 2009/01/28(水) 02:22:31 ID:??? (+3,-30,-70)
    んーまてよ
    nameインデックスとcompany_name_indexインデックスがあるのか

    show create table company\G と
    show create table employee\G を見せてほしい
    354 : NAME IS - 2009/01/28(水) 02:35:59 ID:??? (+56,+28,-5)
    バグじゃないよ
    遅くならないDBMSがあったら教えてほしい
    355 : NAME IS - 2009/01/28(水) 03:27:41 ID:??? (+10,-30,+0)
    >>351,352
    何度もありがとうございます。以下が結果なんですけど、何か分かりますでしょうか。
    もしかして、MyISAMだと制限があるとか?

    mysql> show create table company¥G
    *************************** 1. row ***************************
    Table: company
    Create Table: CREATE TABLE `company` (
    `id` int(11) NOT NULL auto_increment,
    `name` varchar(100) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `name` (`name`),
    KEY `company_name_index` (`name`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
    1 row in set (0.32 sec)

    mysql> show create table employee¥G
    *************************** 1. row ***************************
    Table: employee
    Create Table: CREATE TABLE `employee` (
    `id` int(11) NOT NULL auto_increment,
    `name` varchar(100) NOT NULL,
    `company_id` int(11) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `employee_company_id_index` (`company_id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    356 : NAME IS - 2009/01/28(水) 03:36:16 ID:??? (+3,-30,-61)
    UNIQUE KEY `name` (`name`),
    KEY `company_name_index` (`name`)

    なんで同じの二個作ってるの
    UNIQUEじゃない方消そう

    でも参照性能自体は特に問題ないはずだなー
    速い遅いって何ミリ秒の話をしてる?
    でも今日は寝る
    357 : NAME IS - 2009/01/28(水) 05:53:24 ID:??? (+0,-29,-35)
    遅くなるのはfilesortになってるからだろうな。
    試しにorder byしないと応答速いんじゃね?
    358 : NAME IS - 2009/01/28(水) 11:34:17 ID:??? (+6,-21,-54)
    >>357
    おっしゃる通りです。
    order by がないとすごく速いです。

    Oracleだとヒント文をSQLに付加できるそうですが、MySQLでもそのような機能があるのでしょうか。
    359 : NAME IS - 2009/01/28(水) 12:48:18 ID:??? (-1,-29,-19)
    てか、order byせずにlimitする用途なんてある?
    360 : NAME IS - 2009/01/28(水) 14:12:30 ID:??? (+3,-30,-112)
    ソートが遅いんだったら、
    パラメータのsort_buffer_sizeを増やしてみる。
    デフォルト2MBなので、まずは20MB(20971520)とか。

    MySQLでもOracleのヒント句のように
    インデックスを使わせたりテーブル結合順を制御することはできる。
    だけど現状最適なので、ヒント句を書く内容の候補がない。
    361 : NAME IS - 2009/01/28(水) 19:22:35 ID:??? (+3,-29,-31)
    同じ属性のフィールドを複数同時に加えることってできませんか?

    alter table tbl add a,b int

    みたいな感じでやってもエラーだったんですけど
    地道に一個ずつやるしかないですか?
    362 : NAME IS - 2009/01/28(水) 20:33:59 ID:??? (+3,-29,-8)
    alter table tbl add (b int, c int);
    これでできたよ
    363 : NAME IS - 2009/01/29(木) 00:49:00 ID:??? (+29,+0,-1)
    >>362
    できました! ありがとうございます!
    366 : NAME IS - 2009/01/29(木) 13:18:25 ID:??? (-5,-30,-218)
    3.23って複合インデックスないんだっけ?あるよね?

    mysql> create unique index t_c1c2 on t (c1, c2);
    Query OK, 9 rows affected (0.17 sec)
    Records: 9 Duplicates: 0 Warnings: 0

    mysql> insert into t values (5, 'a');
    Query OK, 1 row affected (0.00 sec)

    mysql> insert into t values (5, 'b');
    Query OK, 1 row affected (0.00 sec)

    mysql> insert into t values (5, 'a');
    ERROR 1062 (23000): Duplicate entry '5-a' for key 't_c1c2'

    368 : NAME IS - 2009/01/30(金) 20:24:16 ID:??? (+57,+29,-58)
    あのテーブルはいくつでも結合する事が可能なんでしょうか?
    結合するテーブルが多いほど処理速度が遅くなると考えていいのでしょうか?
    369 : NAME IS - 2009/01/30(金) 23:42:59 ID:??? (+52,+29,-15)
    いくつ結合するつもりなん?
    370 : NAME IS - 2009/01/31(土) 01:04:34 ID:??? (+3,-30,-144)
    61個。

    mysql> select count(*) from t t0
    -> inner join t t1
    -> inner join t t2
    -> inner join t t3
    -> inner join t t4
    -> inner join t t5

    -> inner join t t69
    -> ;
    ERROR 1116 (HY000): Too many tables; MySQL can only use 61 tables in a join


    > 結合するテーブルが多いほど処理速度が遅くなると考えていいのでしょうか?

    Yes。
    うちの開発では
    「テーブル結合はOracleは5つまで、MySQLは3つまでにしてください」
    って言ってる。
    371 : NAME IS - 2009/01/31(土) 03:13:41 ID:??? (+51,+28,-1)
    わざわざ作ったんかwwww
    373 : NAME IS - 2009/02/02(月) 00:21:44 ID:??? (+57,+29,-5)
    正規化って言葉を知ってるならどうすればいいかくらいすぐ分かるだろうに
    374 : NAME IS - 2009/02/02(月) 00:22:02 ID:??? (+44,+29,-1)
    >>372
    あったまかてぇなぁ~
    375 : NAME IS - 2009/02/02(月) 01:52:55 ID:??? (-2,-30,-136)
    何故トヨタ日産がclientかよくわからないけど、

    ・client_listリレーションからperson_idを削除
    ・新たにperson_idとclient_idの2属性を持つリレーションを作成
    376 : NAME IS - 2009/02/02(月) 12:25:40 ID:??? (+62,+29,-68)
    MySQLにはクエリキャッシュ機能がありますが、
    あれをオンにすると速くなるのはわかるのですが、
    なにかトレードオフみたいなのあります?
    いまからクエリキャッシュをオンにしようと思うのですが
    気をつけなきゃいけないことがあれば教えてください。
    377 : NAME IS - 2009/02/02(月) 18:00:45 ID:??? (+12,-29,-58)
    ・一発でも更新クエリが流れるとキャッシュ全クリアされる
    ・サーバサイドPreparedStatementを使っていると役に立たない(5.0)

    99.99%が参照のみっていうDBじゃないと意味がない機能。
    でもトレードオフはほとんどないです
    378 : NAME IS - 2009/02/02(月) 19:29:51 ID:??? (+59,+29,-15)
    >>377
    当たり前かも知れないけど、あるテーブルが更新されると、
    そのテーブルのキャッシュが破棄されるんだよね?
    379 : NAME IS - 2009/02/02(月) 22:27:56 ID:??? (+57,+29,-6)
    なら更新した直後に自動でキャッシュ作ってくれればいいのに
    380 : NAME IS - 2009/02/02(月) 22:50:07 ID:??? (+5,-22,-1)
    そういうのはmemcachedの役目だろう
    381 : NAME IS - 2009/02/04(水) 06:25:40 ID:??? (+3,-29,-169)
    数十人にそれぞれコメント欄としてvarchar(255)を30くらい定義して
    新しいコメントが入ったら古いコメントを削除するみたいなことを
    やりたいんですが

    IDを1つとvarcharを1~30まで定義しておいて、新しいコメントがきたら
    1~29のvarcharを1つずつ後ろにupdateしてずらし、1に新しいコマンドを
    updateする

    数十人それぞれにテーブルを作成し、新しいコメントがきたらそれをinsert
    そして一番古く作成されたコメントをdeleteする

    どっちのほうがいいでしょうか、もしくはもっといい方法がありますでしょうか
    最初のほうは処理に時間がかかりそうですし、二つ目はテーブルってそんな
    数十人に一個ずつ作るものなのか不安というかなんというか
    どうか教えてくださいお願いします
    382 : NAME IS - 2009/02/04(水) 06:43:37 ID:??? (+57,+29,-6)
    正規化勉強しろと
    この後のレスで説教されると思います
    383 : NAME IS - 2009/02/04(水) 06:47:14 ID:??? (+76,+29,-3)
    >>383
    そのお言葉大変ありがたいです。ありがとうございます
    正規化勉強してきます
    384 : NAME IS - 2009/02/04(水) 07:26:11 ID:??? (+3,-29,-53)
    すいません、わかりました
    IDと本文(varchar255)一つとTIMESTAMPをフィールドにして
    やればよかったんですね
    こうやればレコードの数は膨大になりますが、insertとdeleteもできるし
    テーブルも一個で済みますね
    385 : NAME IS - 2009/02/04(水) 09:00:11 ID:??? (+47,+29,+0)
    膨大...?
    386 : NAME IS - 2009/02/04(水) 21:12:43 ID:??? (+0,-27,-20)
    PDOのfetchの使い方わかんないんで
    誰か教えて
    387 : NAME IS - 2009/02/04(水) 23:05:06 ID:??? (+42,+24,+0)
    いいよ
    388 : NAME IS - 2009/02/04(水) 23:16:55 ID:??? (+25,-2,-30)
    データーベースから、fetchで情報を取ってきて、
    それを画面に表示したいんだけど、なぜか
    オプション?が45個もあって、
    何をどうしたらいいのか、わからないんです
    389 : NAME IS - 2009/02/04(水) 23:21:53 ID:??? (+46,+23,-16)
    何オプションって?
    390 : NAME IS - 2009/02/04(水) 23:28:20 ID:??? (+3,-30,-169)
    ZFS+MySQL+MyISAMではこの程度。
    ./mysqlbench -U test -P test -c 50 -t 100 testdb
    tps (include connections establishing) . : 373.115227
    tps (exclude connections establishing) . : 373.576012

    がしかし、これに後からSSDをcacheとして加えると。
    tps (include connections establishing) . : 1120.192135
    tps (exclude connections establishing) . : 1124.534049
    くらいまで上がりました。 少し嬉しかった。


    391 : NAME IS - 2009/02/05(木) 07:35:03 ID:??? (+76,+29,-34)
    varchar(int)のintをどれくらいに設定したらいいかわからないから
    とりあえずちょっと多めにしとくか、みたいな自分の性格に影響している値を
    入れているのですがそこまでこだわる必要なないのでしょうか?
    392 : NAME IS - 2009/02/05(木) 08:36:48 ID:??? (+47,+15,+1)
    >>391
    男は黙って255
    393 : NAME IS - 2009/02/05(木) 09:22:27 ID:??? (+57,+29,-5)
    なんのために設定するのかを知らないと意味ないのでは・・・
    394 : NAME IS - 2009/02/05(木) 09:38:58 ID:??? (+5,-29,-89)
    PHPでやっているんですが
    ソートして最小から数えて4番目のレコードを取り出したいとき
    whereをつかってピンポイントにそのレコードだけselectできるでしょうか?
    それともPHP側でmysql_fetch_arrayでソートしたデータを全部selectして
    配列の要素で4を指定して使わないとダメですか?
    395 : NAME IS - 2009/02/05(木) 09:38:59 ID:??? (+47,+24,+0)
    悩んだら100にしてる
    396 : NAME IS - 2009/02/05(木) 09:42:12 ID:??? (+57,+29,-5)
    すいません、4番目だったら要素は3入れないとダメですね
    397 : NAME IS - 2009/02/05(木) 09:43:11 ID:??? (+5,-30,-156)
    >>394

    mysql> select * from t order by c1;
    +------+------+
    | c1 | c2 |
    +------+------+
    | 1 | a |
    | 2 | a |
    | 3 | a |
    | 4 | a |
    | 5 | a |
    | 6 | a |
    +------+------+
    6 rows in set (0.00 sec)

    mysql> select * from t order by c1 limit 3, 1;
    +------+------+
    | c1 | c2 |
    +------+------+
    | 4 | a |
    +------+------+
    1 row in set (0.00 sec)
    398 : NAME IS - 2009/02/05(木) 09:47:57 ID:??? (-4,-27,-5)
    RDBにn番目なんて概念あるの?
    399 : NAME IS - 2009/02/05(木) 09:52:21 ID:??? (+57,+29,-31)
    「ソートして最小から数えて」だからあるんじゃない?
    あーでも同着4位があるとまずいな
    400 : NAME IS - 2009/02/05(木) 10:01:08 ID:??? (+56,+28,-1)
    なるほど、limitをうまく使えばできるんですね
    ありがとうございました
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - insertall + - mregexp + - SSD + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について