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

    元スレMySQL 総合 Part24

    mysql覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    204 = :

    >>202
    他のRDBMSは知らないが、都度オプティマイザーがどっちが効率的かを判定して決める。

    205 = :

    >>202
    他のRDBMSは知らないが、都度オプティマイザーがどっちが効率的かを判定して決める。

    206 = :

    インデックスについての質問です。マルチカラムインデックス作成するのってクエリ早くする上での対策として定石なんですか?

    select * from hogehoge where a = 1 order by b limit 10;

    とかのクエリはaとbのマルチカラムインデックス張らないとaのインデックスしか有効にならないって認識なんですが合ってますかね?

    PostgreSQL普段使っててちと勉強中です。

    207 = :

    >>206
    explain して比較してみればいいんじゃないの。

    208 = :

    >>207
    explainしてインデックスの利用状況確認してるんですが、一回のソートで一つのインデックスしか使われないんですね・・・。
    実際にはjoinしてwhere かけているsql文なのですが、マルチカラムインデックスを作成してもuse index句を入れないとマルチカラムインデックスが使われませんでした。

    設定とかでマルチカラムインデックスを優先して使ってもらう方法ってありますか? 特定のORM使ってるので、use index入れるのが辛いので・・・。

    209 = :

    >>208
    それはデータの中身や量の問題だよ

    プランナがインデックスよりスキャンのほうが好ましいと思えばそうなる

    設定だとrandam_costいじれば良いが、ここMySQL板だぞ

    210 = :

    .>>209
    すいません、言葉足らずでした。PostgreSQLを普段使っててMySQLを勉強中という意味です。
    案件でMySQLが多いので運用のノウハウとか知りたくて色々弄ってる最中です。

    211 = :

    MySQLって結構クセがあるんですね。↓のようなクエリはインデックス使われないから別の方法考えた方がいいですよね?

    select * from A inner join B on A.b_id = B.id where B.colum1 order by A.create_date;

    212 = :

    間違えた・・こっちでした。

    select * from A inner join B on A.b_id = B.id where B.colum1 = 'hogehoge' order by A.create_date;

    213 = :

    >>212
    DDLも書かずにそう言われても答えようがない

    214 = :

    >>212
    use indexはどうなった?利用したらどうなんだ?

    215 = :

    Oracle、PostgreSQLなど他のRDMSからMySQLに移動してきて
    移行が成功したって思った後に最初につまづくのが大体
    order by、group byや複合カラム等へのインデックスの適用がされていなくて
    パフォーマンスがた落ちってとこだからな。要注意

    216 = :

    >>213
    すいません、DDLはこんな感じです。

    create table A (
    id integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    create_date datetime
    );

    create table B (
    id integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    column1 varchar(64)
    );

    >>214
    ORM使ってる都合上、あんまりやりたくなかったです。でも使うのが定石なら仕方ないですね。

    >>215
    まじでそうですね・・・。ノウハウ積めればいいので良い経験にはなりますが、業務でこれはやりたくない・・。


    ちなみにPostgreSQLに対してMySQLが優位なのって下記の点だと思ってるのですが他にありますか?
    ・同時接続数が増えてもパフォーマンスの劣化が起こりにくい
    ・レプリケーション機能が枯れているので安定性があり、情報がそこらじゅうに転がっている
    ・パーテショニングが比較的使いやすい
    ・設定が楽

    オプティマイザが改良されてるMariaDBで試してみます。

    217 = :

    >>216
    a.create_dateにインデックス作れ。
    オプティマイザーの問題以前に、存在しないインデックスは選びようがない。

    218 = :

    >>217
    すいません、インデックスのDDL書くの忘れていました。
    a.create_dateとb.column1にはインデックス張ってます。
    マルチカラムインデックスも作成したのですが、joinとorder byを組み合わせるとuse indexを指定しないとインデックスを使ってくれませんでした。

    219 = :

    >>218
    データの問題で使ってくれないだけじゃないかな?
    うちではこういう結果になる (A.create_dateとB.column1はランダムで生成)

    mysql> SHOW CREATE TABLE A \G SHOW CREATE TABLE B \G
    *************************** 1. row ***************************
    Table: A
    Create Table: CREATE TABLE `A` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `create_date` datetime DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `A_create_date_idx` (`create_date`)
    ) ENGINE=InnoDB AUTO_INCREMENT=65521 DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)

    *************************** 1. row ***************************
    Table: B
    Create Table: CREATE TABLE `B` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `column1` varchar(64) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=262135 DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)

    mysql> EXPLAIN SELECT * FROM A JOIN B ON B.id = A.id WHERE B.column1 = CAST(RAND() AS CHAR) ORDER BY A.create_date \G
    *************************** 1. row ***************************
    id: 1
    select_type: SIMPLE
    table: A
    type: index
    possible_keys: PRIMARY
    key: A_create_date_idx
    key_len: 6
    ref: NULL
    rows: 33157
    Extra: Using index
    *************************** 2. row ***************************
    id: 1
    select_type: SIMPLE
    table: B
    type: eq_ref
    possible_keys: PRIMARY
    key: PRIMARY
    key_len: 8
    ref: test.A.id
    rows: 1
    Extra: Using where
    2 rows in set (0.00 sec)

    220 = :

    >>218
    MySQLのオプティマイザはアホの子なので、ある程度データが入ったテーブルでJOINするとかなり見誤る。

    USE INDEXでしのげるなら付けてあげて。。

    221 = :

    >>219
    有難うございます、そこまでやって頂いて感謝です。
    おっしゃる通り、どうやらデータ量(100万件ぐらい)が若干多いせいみたいでオプティマイザがインデックス使ってくれないみたいです。

    色々試してみたのですが、下記の方法でインデックスを使ってくれるようになりました。

    改善前 SELECT * FROM A JOIN B ON B.id = A.id WHERE B.column1 = CAST(RAND() AS CHAR) ORDER BY A.create_date;

    改善後 SELECT * FROM A JOIN B ON B.id = A.id WHERE A.create_date < now() and B.column1 = CAST(RAND() AS CHAR) ORDER BY A.create_date;

    思ったより面倒な対処しなくて済みそうで良かったです、有難うございます!

    >>220
    そうですね・・・ちとアホの子ですね・・・。小さい規模はPostgreSQLで、大規模はMySQLでってのが少しわかりました。
    小さい規模はORMでSQL文気にしないでプログラムしても大抵インデックス使われるけど、MySQLはオプティマイザを考慮したSQL文書かないとダメだからちょっと工数かかる、その代りスケールしやすいって感じなんですかね。

    222 = :

    >>221
    まず基本として
    USE INDEXをつけてインデックスを使うものは
    データやプランナの問題か、根本的に必要がない。
    USE INDEXをつけてインデックスを使わないものは
    DBの仕様の問題か、インデックスの貼りかたの問題

    これPostgreSQLでも常識だろうが

    で、USE INDEXをつけたときとつけないときの、応答速度はどうなんだい?

    >>221
    >小さい規模はPostgreSQLで、大規模はMySQL
    それは気のせいだ

    223 = :

    >>222
    USE INDEXをつけてインデックスが使われた場合は0.03秒、使われなかった場合は1.2秒といった結果でした。
    PostgreSQLは適当にSQL文書いても、割とインデックス使ってくれます・・・。

    224 = :

    >>223
    インデックスを使わないシークの数の上限設定ができたはず。

    225 = :

    >>224
    有難うございます、調べてみます。

    226 = :

    PostgreSQLを触っててMySQL触りだすと
    昔と違って今だと、シビアにチューニングできなければつらいだけ

    ポテンシャルはMySQLのがまだ高いけど、大体はPostgreSQLに負ける

    228 = :

    そりゃシビアにチューニングできる会社だからな

    同じく出来るなら使えばいいんじゃね

    ホスティングとか自社サービスじゃない系はPostgreSQLかそれベースのものが増えてるからな

    229 = :

    大規模はMySQLて何を根拠にしてんだろ?

    230 = :

    google mysql やめるって

    231 = :

    MariaDBにするってだけでしょ?

    232 = :

    自力で実装しなきゃなんないシャーディンクを
    標準機能とでも思ってるのでは

    233 :

    というか、オラクルがスキあらば金取ろうとして超うざい。
    わざわざ会社にまで電話かけてくんなマンカス>日本オラクルの馬鹿女

    234 = :

    >>222
    > >>221
    > >小さい規模はPostgreSQLで、大規模はMySQL
    > それは気のせいだ
    元ネタはこれだな。
    http://www.slideshare.net/matsunobu/ss-28303485

    235 = :

    今となっての大きな違いはマルチスレッドかマルチコアかぐらいの違いぐらいか。

    236 = :

    クラスタリングに関してはMySQLだろう
    大規模ってそういう事じゃないの?

    237 = :

    >>236
    枯れきってるって意味ではな

    サポート頼るならpostgresのがいい

    238 = :

    >>234
    読んできた。結構知識が偏ってるようで

    2004年で日本は既にMySQL > PostgreSQLだったような
    今は逆に、世界の方がPostgreSQLの比率が多い

    239 = :

    postgresもamazon rdsでもサポート始まったしな
    MySQLはオワコン
    かといって素直にみんなMariaいくかと言えば
    「まてよ」と一度考察が入るのでそうでもない。
    オラクルのMySQLつぶしはほとんど成功だな

    240 = :

    >>239
    FaceBookが利用してるやり方やDeNAがやってることとか考えると
    MySQLじゃないとだめな用途はちゃんとある

    PostgreSQLもビッグデータ系で多々使われるようになってるし
    クラウドと実は相性が良いということもあるし

    どっちもこれからまだまだいける

    241 = :

    >>240
    >FaceBookが利用してるやり方やDeNAがやってることとか考えると
    >MySQLじゃないとだめな用途はちゃんとある

    例えばどんな? 否定でなく、単純に知りたい。

    >>238
    > 読んできた。結構知識が偏ってるようで


    俺もそう思う。大規模の定義がFBとGoogle。この2社以外はコスト的にAWSに敵わないみたいに読める。
    実際はそんな簡単じゃないんだけども。

    データを自社に置くか置かないをコストだけで判断しない業種がたくさんあるわけだが、
    そういう視点がすっぽり抜けてる。

    242 = :

    >>241
    FaceBookの利用は、そのURLに書いてあった内容だよ。
    DeNAは
    http://www.publickey1.jp/blog/10/nosqlmysqldenamemcached75.html
    http://itpro.nikkeibp.co.jp/article/Interview/20110801/363141/

    243 = :

    >>242

    いや、2010年ころの話をされても。。。。って思った訳っす。

    上のスライドの趣旨としては、2000年-2005年くらいの状況として
    大規模はMySQLを選んだみたいに言ってるようにみえるから。

    244 = :

    >>242

    ついでにいうとFBやGoogleみたいに中身をぐちゃぐちゃに改造して
    大規模対応って言われてもなぁみたいな。

    中を改変しちまえば、そりゃなんでもできるじゃないという。


    MySQLは大規模に向いているという理由が理解できない。

    245 = :

    スレッドベースだとなんでLLと相性いいの?

    246 = :

    >>243
    どこにもそんな古い話ではかかれてないよ
    今の話だよ

    247 = :

    >>244
    それは作者に聞いてください

    MySQLがPostgreSQLより大規模に向いてるとは僕は思ってない

    248 = :

    >>245

    RDBMSのコネクションプーリングとかその辺の話 - wyukawa’s blog
    http://d.hatena.ne.jp/wyukawa/20131116/1384621867

    249 = :

    >>241

    知識は偏ってるね。
    まぁ、元 MySQL のサポートエンジニアでその後は WEB系でしか働いてない人だししゃーないかな。

    >> 俺もそう思う。大規模の定義がFBとGoogle。この2社以外はコスト的にAWSに敵わないみたいに読める。
    >> 実際はそんな簡単じゃないんだけども。
    >> データを自社に置くか置かないをコストだけで判断しない業種がたくさんあるわけだが、
    >> そういう視点がすっぽり抜けてる。

    俺もそう思うが、そういう人は相手にしてない資料なんじゃないかな。
    正直、人事系とか外に出すなんてって思っちゃうけど、
    今後 AWS 使うのは普通になる世の中が来るのかね。

    昔は業務系、今は WEB系で働いてるが、WEB系に関しては、
    よっぽどのことがない限りコストでは AWS の RDS のほうが有利だね。
    細かなチューニングとか、トラブル時の調査とかしにくいけど、
    チューニング出来る人雇うぐらいならスケールアップしたほうが安いっていう。

    250 = :

    >>248
    一通り見た。
    コネクションプールを使わない場合は
    MySQLのがコネクションを貼るコストがスレッドだから安いから速いってことか

    複数台構成の場合コネクションプール使うし
    1台の場合貼りっぱなしで問題ないから理解が出来なかった


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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