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

    元スレMySQL 総合 Part15

    mysql覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 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 = :

    むー
    結合したSQLで両テーブルともちゃんとインデックス使ってるじゃん
    これでどうして遅いんだ?
    limitしないと100万件とかヒットする巨大データとか?

    352 = :

    んーまてよ
    nameインデックスとcompany_name_indexインデックスがあるのか

    show create table company\G と
    show create table employee\G を見せてほしい

    354 = :

    バグじゃないよ
    遅くならないDBMSがあったら教えてほしい

    355 = :

    >>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 = :

    UNIQUE KEY `name` (`name`),
    KEY `company_name_index` (`name`)

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

    でも参照性能自体は特に問題ないはずだなー
    速い遅いって何ミリ秒の話をしてる?
    でも今日は寝る

    357 = :

    遅くなるのはfilesortになってるからだろうな。
    試しにorder byしないと応答速いんじゃね?

    358 = :

    >>357
    おっしゃる通りです。
    order by がないとすごく速いです。

    Oracleだとヒント文をSQLに付加できるそうですが、MySQLでもそのような機能があるのでしょうか。

    360 = :

    ソートが遅いんだったら、
    パラメータのsort_buffer_sizeを増やしてみる。
    デフォルト2MBなので、まずは20MB(20971520)とか。

    MySQLでもOracleのヒント句のように
    インデックスを使わせたりテーブル結合順を制御することはできる。
    だけど現状最適なので、ヒント句を書く内容の候補がない。

    361 = :

    同じ属性のフィールドを複数同時に加えることってできませんか?

    alter table tbl add a,b int

    みたいな感じでやってもエラーだったんですけど
    地道に一個ずつやるしかないですか?

    362 = :

    alter table tbl add (b int, c int);
    これでできたよ

    363 = :

    >>362
    できました! ありがとうございます!

    368 = :

    あのテーブルはいくつでも結合する事が可能なんでしょうか?
    結合するテーブルが多いほど処理速度が遅くなると考えていいのでしょうか?

    369 = :

    いくつ結合するつもりなん?

    370 = :

    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 = :

    わざわざ作ったんかwwww

    373 = :

    正規化って言葉を知ってるならどうすればいいかくらいすぐ分かるだろうに

    374 = :

    >>372
    あったまかてぇなぁ~

    376 = :

    MySQLにはクエリキャッシュ機能がありますが、
    あれをオンにすると速くなるのはわかるのですが、
    なにかトレードオフみたいなのあります?
    いまからクエリキャッシュをオンにしようと思うのですが
    気をつけなきゃいけないことがあれば教えてください。

    378 = :

    >>377
    当たり前かも知れないけど、あるテーブルが更新されると、
    そのテーブルのキャッシュが破棄されるんだよね?

    379 = :

    なら更新した直後に自動でキャッシュ作ってくれればいいのに

    380 = :

    そういうのはmemcachedの役目だろう

    381 = :

    数十人にそれぞれコメント欄としてvarchar(255)を30くらい定義して
    新しいコメントが入ったら古いコメントを削除するみたいなことを
    やりたいんですが

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

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

    どっちのほうがいいでしょうか、もしくはもっといい方法がありますでしょうか
    最初のほうは処理に時間がかかりそうですし、二つ目はテーブルってそんな
    数十人に一個ずつ作るものなのか不安というかなんというか
    どうか教えてくださいお願いします

    382 = :

    正規化勉強しろと
    この後のレスで説教されると思います

    383 = :

    >>383
    そのお言葉大変ありがたいです。ありがとうございます
    正規化勉強してきます

    384 = :

    すいません、わかりました
    IDと本文(varchar255)一つとTIMESTAMPをフィールドにして
    やればよかったんですね
    こうやればレコードの数は膨大になりますが、insertとdeleteもできるし
    テーブルも一個で済みますね

    385 = :

    膨大...?

    386 = :

    PDOのfetchの使い方わかんないんで
    誰か教えて

    387 = :

    いいよ

    388 = :

    データーベースから、fetchで情報を取ってきて、
    それを画面に表示したいんだけど、なぜか
    オプション?が45個もあって、
    何をどうしたらいいのか、わからないんです

    389 = :

    何オプションって?

    390 = :

    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 = :

    varchar(int)のintをどれくらいに設定したらいいかわからないから
    とりあえずちょっと多めにしとくか、みたいな自分の性格に影響している値を
    入れているのですがそこまでこだわる必要なないのでしょうか?

    392 = :

    >>391
    男は黙って255

    393 = :

    なんのために設定するのかを知らないと意味ないのでは・・・

    394 = :

    PHPでやっているんですが
    ソートして最小から数えて4番目のレコードを取り出したいとき
    whereをつかってピンポイントにそのレコードだけselectできるでしょうか?
    それともPHP側でmysql_fetch_arrayでソートしたデータを全部selectして
    配列の要素で4を指定して使わないとダメですか?

    395 = :

    悩んだら100にしてる

    396 = :

    すいません、4番目だったら要素は3入れないとダメですね

    397 = :

    >>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)

    399 = :

    「ソートして最小から数えて」だからあるんじゃない?
    あーでも同着4位があるとまずいな

    400 = :

    なるほど、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 + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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