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

    私的良スレ書庫

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

    元スレMySQL 総合 Part14

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 1 + - mysqldump + - rXBUq5sa + - share + - utf8_bin + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    601 : 595 - 2008/10/10(金) 19:14:35 ID:??? (+16,+9,-2)
    >>595
    結局インデックス貼って順次phpで書き換えました。
    604 : NAME IS - 2008/10/10(金) 22:19:38 ID:??? (+17,+20,-6)
    >>603
    それだと片方重複でNGになっちゃう。

    条件分岐はSQLではやらないほうがいいと思うけど。
    605 : NAME IS - 2008/10/10(金) 22:27:20 ID:??? (+25,+25,-18)
    >>604
    NGって?
    エラー無視しておけば良いだけでは?
    606 : 602 - 2008/10/10(金) 22:30:05 ID:??? (+8,+9,-72)
    >>603-605
    あくまでも「両方共に一致する場合」なんです。
    例えばidが2でnameがaaaだと登録出来るようにしたいのです。
    primaryだとそれは無理なのではないでしょうか?

    PHPを使って、1回毎にSELECTで登録されているか否かを判定して
    対処しようとも思ったのですが、件数が増えると負荷がかかりすぎるので
    なんとかSQLで対処出来ないものか?っと悩んでいます。
    607 : NAME IS - 2008/10/10(金) 22:39:57 ID:??? (+27,+29,-36)
    存在するかどうかを判定する部分と挿入する部分はアトミックにしておかないと。
    存在しないと思っている間に、
       他の人が存在しないから挿入。
    挿入しようとして、、、エラーか二重挿入か。。。
    となるよ。
    608 : NAME IS - 2008/10/10(金) 22:51:41 ID:??? (+27,+29,-27)
    そんなものは、書き込みロックだコノヤロウ。
    読み取りは複合インデックスで間に合うだろ。常識的な量なら。
    611 : NAME IS - 2008/10/11(土) 05:41:02 ID:??? (+25,+29,-21)
    複合キーが使えるとは限らないのでは?
    直接SQL叩くわけじゃなからろうから。
    612 : 602 - 2008/10/11(土) 09:29:31 ID:??? (+32,+29,-48)
    みなさん、ありがとうございます!複合キーの存在を知りませんでした。

    複合キーを指定すれば、双方に一致する重複キーは登録出来ませんでした。
    ソースも提示していただき、ありがとうございました。勉強になりました。
    613 : NAME IS - 2008/10/11(土) 10:10:03 ID:??? (-28,-29,-6)
    >>611
    別にコンソールから出なくても
    phpMyAdminとかでも普通に設定できるんだけどね。
    614 : NAME IS - 2008/10/12(日) 23:24:51 ID:??? (-29,-29,-35)
    phpmyadminていうのは、
    もしかして、データーベースの設計はできるけど
    その中にデータ-を突っ込むのはphpのコードを
    書かないとできないの?
    615 : NAME IS - 2008/10/13(月) 16:36:39 ID:??? (+1,+7,+0)
    >>614
    できるよ
    CSVぶっかけとかもいける
    616 : NAME IS - 2008/10/13(月) 21:50:48 ID:??? (-19,-30,-150)
    下の様なテーブル構成のテーブルがあったとしてsubjectとbodyが同じカラムデータをもっているので
    まとめようかと考えています。

    user(id,name)
    subject(id,text)
    body(id,text)

    下の様にtextカラムをtypeでsubjectなのかbodyなのかを判別する形になります。
    user(id,name)
    text(id,type,text)

    こういったテーブルの結合は結合前と比べてselect,update,insert時の速度にどんな影響が出るでしょうか?
    622 : 621 - 2008/10/14(火) 13:07:51 ID:??? (+16,+25,-1)
    間違えた。
    >>621>>620 宛て。
    625 : NAME IS - 2008/10/15(水) 12:22:41 ID:JiSJzo9m (+2,+7,-35)
    質問です。
    内部結合と外部結合のどちらもできる場合どちらを使うべきでしょうか?
    626 : NAME IS - 2008/10/15(水) 12:26:45 ID:??? (+27,+29,-16)
    状況によるでしょ、適切な方を使えばいい。
    627 : NAME IS - 2008/10/15(水) 17:06:47 ID:48BARsZo (-15,-30,-122)
    質問です。
    掲示板のデータを格納するようなテーブルを作ってデータを300万件ほど格納し、
    以下のようなSQLを発行すると処理に40秒ほどかかってしまうのですが、
    もっとデータの抽出に速度を上げる方法などはないのでしょうか?

    SELECT * FROM Messages ORDER BY primary LIMIT 1000000, 30

    尚、テーブルはMyISAMで設定は以下の通りです。

    key_buffer = 512M
    sort_buffer_size = 8M
    read_rnd_buffer_size = 8M
    628 : NAME IS - 2008/10/15(水) 17:28:07 ID:??? (+14,+29,-16)
    連番ふってインデックス用意すれば?
    631 : 627 - 2008/10/15(水) 17:53:09 ID:48BARsZo (-19,+29,-103)
    >>630
    レス有難うございます。
    その方法も考えたのですが、DELETE文は流せなくなる(連番に空きが出来る為)のと、
    他のカラム(書き込み時間など)でのソートが出来なくなると思います。

    DELETE文は当初から流すつもりはないのでいいのですが。
    他のカラムでのソートは結構ありえます。
    INDEXが張られている他のカラムでも迅速に結果を抽出できたらと思っています。
    632 : NAME IS - 2008/10/15(水) 18:04:44 ID:??? (+31,+29,-57)
    条件の後出しは嫌われるよ。

    LIMIT対象が10万とか100万になったら今のmysqlでは遅いのはどうにも
    なんないと思う。whereで適切に対象を絞れるようなデータの持ち方を
    工夫しろとしかいえないな。
    633 : NAME IS - 2008/10/15(水) 18:08:36 ID:??? (+4,+14,-11)
    そのLIMIT の数値が少ないときは速くなるの?
    EXPLAINとってみた?
    まあ構造考えた方がいいかもね。
    634 : 627 - 2008/10/15(水) 18:08:40 ID:48BARsZo (-15,+29,-13)
    >>632
    レス有難うございます。
    最初に記述しておくべきでしたね、以後気をつけます。

    やはりどうにもならないですか…。
    有難うございます、勉強になりました。
    635 : NAME IS - 2008/10/15(水) 18:09:20 ID:??? (+16,+23,-1)
    っと、リロードしてなかったー
    637 : NAME IS - 2008/10/15(水) 18:19:51 ID:??? (+23,+29,-71)
    結局、「limit の offset が百万というのを、何か別のindexの掛ったキーから取り出せないか」ということに尽きるのでは。
    offsetきっかり百万から30個欲しいというシチュエーションが、どういうものか、想像が付かないけど。
    639 : NAME IS - 2008/10/15(水) 18:29:13 ID:??? (+27,+29,-3)
    探すのが人間だとそれはちょっと苦しいかな
    640 : NAME IS - 2008/10/15(水) 19:49:04 ID:??? (+16,+18,-18)
    念のため、MySQL以外でも厳しいクエリなので誤解なきよう
    641 : NAME IS - 2008/10/15(水) 21:18:33 ID:??? (+27,+29,-22)
    全てをDBに載せるんじゃなくてハッシュと併用すれば?
    642 : NAME IS - 2008/10/16(木) 09:03:27 ID:??? (+4,+6,-35)
    しょっちゅう更新されるならあれだが、そうじゃないなら、delete のたびに
    連番を振り直して primary キーと対応させたテーブルを作って join するとか。
    645 : NAME IS - 2008/10/16(木) 12:13:57 ID:rARIjcbd (+27,+30,-136)
    あるテーブルの主キーを別な列に変えました。
    そのときの新しいカラムが後ろにあるのですが、これをテーブルの先頭側に移動するには
    どうしたらいいでしょうか?

    またこの変更から気になったのですが、MySQLは必ず主キーの順で取り出されると
    どこかで目にしたと思っていたのに、適当なselectだと元の主キーの順っぽく出てきます。
    どこかにこの情報が格納されててanalyzeとかするとこういうのはきれいになったりするのでしょうか。
    多少のキーワードでもいただければうれしいです。

    >>638
    同じような理由で、うちはwordpressっていうブログのデータベースにそれなりの数の記事突っ込ん
    だら管理画面からじゃ管理できなくなりました。
    しょっぱすぎるpkey直接指定の管理画面を用意してほぼ手作業(フィールドの直接編集っぽいやつ)
    で編集してます。
    646 : NAME IS - 2008/10/16(木) 12:18:47 ID:??? (-22,-28,-41)
    >>645
    RDBMSにはそういった順番の概念はない。
    順番が必要なら必ずORDER BYすること。
    647 : 645 - 2008/10/16(木) 13:07:05 ID:??? (+35,+29,-93)
    >>646
    どこでこんな間違いを覚えてきたのか、某okwaveにも書いてありました。
    > マニュアルにも「order by指定がない場合は、順序保証しない」ことは明記されています。
    postgresql出身で、初めて知ったときはpkey順に保証されてるんだーmysqlってふしぎーとか思ってました。
    ひどい思い違い乙。
    648 : NAME IS - 2008/10/16(木) 13:24:53 ID:??? (-21,-30,+0)
    インデックスが使われたときはインデックス順、使われなければ格納順な気がする。
    後者はpkを順番につけることが多いのでしばしばpk順に見えるが、順番につけなかっ
    たときは一致しない。

    動作としては自然だよね。ただし仕様はあくまでorder byなしのときの順序は保証しない
    なので、依存したプログラムを書いてはいけません。

    mysql> create table order_test (pk int primary key, c varchar(100));
    Query OK, 0 rows affected (0.08 sec)

    mysql> insert into order_test values (1,'a'),(10,'b'),(5,'c'),(3,'d');
    Query OK, 4 rows affected (0.05 sec)
    Records: 4 Duplicates: 0 Warnings: 0

    mysql> select * from order_test;
    +----+------+
    | pk | c |
    +----+------+
    | 1 | a |
    | 10 | b |
    | 5 | c |
    | 3 | d |
    +----+------+
    4 rows in set (0.02 sec)

    mysql> select * from order_test where pk >= 3;
    +----+------+
    | pk | c |
    +----+------+
    | 3 | d |
    | 5 | c |
    | 10 | b |
    +----+------+
    3 rows in set (0.03 sec)
    649 : NAME IS - 2008/10/16(木) 13:44:24 ID:??? (+25,+29,-14)
    >>648
    なるほど、インデックスを利用しているか否かによって違うってのは
    意識したこと無かったです。そして感覚的に納得できます。
    650 : NAME IS - 2008/10/16(木) 14:03:37 ID:??? (+38,+29,-22)
    >>647
    RDBMSにはそういう概念が無いと言っている
    実際、キミは困っているんだろ?
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 1 + - mysqldump + - rXBUq5sa + - share + - utf8_bin + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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