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

    私的良スレ書庫

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

    元スレMySQL 総合 Part24

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    751 : NAME IS - 2014/08/05(火) 22:07:07.02 ID:???.net (+57,+29,-18)
    じゃあ遠慮無く1テーブルで管理するわ。
    データベースの種別とかで調べてたら速度云々で色々と描かれてるのを見て不安になってたんでな。
    752 : NAME IS - 2014/08/05(火) 23:12:41.07 ID:???.net (+62,+29,-59)
    データの入れ物や、データ出し入れする行為を意識しなくてよいのがDBMSのよいところの一つなのに、
    それを分割してわざわざプログラム側で入れ物を区別するのも滑稽でしょ。
    億・兆オーダーになったら、パーティションを検討してみるのがいいと思う。
    753 : NAME IS - 2014/08/06(水) 10:45:23.80 ID:???.net (+23,-29,-99)
    上記関連事項について質問させてください。
    現在、80万レコードで90MBほどのテーブルがあり、一箇月に10万レコードのペースで増えています。
    レンタルサーバー(coreserver-mini)のMySQLを利用しているのですが、
    どれくらいのレコード数まで順調に動作するものでしょうか?
    300万レコードくらいまで快適に動作すればいいと思うのですが、
    それまで問題ないでしょうか?よろしくお願いします。
    754 : NAME IS - 2014/08/06(水) 20:17:16.92 ID:???.net (+91,+29,-12)
    問題ないよ
    って言われたら信じるの?
    サポートに聞きなさい
    755 : 750 - 2014/08/06(水) 22:15:27.26 ID:???.net (+70,+29,-7)
    >>754
    間違いの無いご回答ありがとうございます。
    全くおっしゃる通りです。
    ありがとうございました。
    756 : NAME IS - 2014/08/13(水) 10:36:04.81 ID:???.net (+3,-30,+0)
    INSERT INTO `tantousya`(`adress`, `namae_kanji`) VALUE ("Tanaka@", "田中")
    WHERE NOT EXISTS ( SELECT * FROM `tantousya` WHERE `tantousya`.`adress` = "Tanaka@");
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064

    adressが既に使われている場合に、
    データを挿入しないサブクエリを実装したのですが上手くいきません。

    INSERT INTO `tantousya`(`adress`, `namae_kanji`) VALUE ("Tanaka@", "田中");
    SELECT * FROM `tantousya` WHERE `tantousya`.`adress` = "Tanaka@;

    二段階に分けて実行した場合は、まずデータが挿入され、
    その後挿入されたデータが表示されます。

    エラー内容からサブクエリの書き方に
    問題があるように見受けられるのですが、
    どこが悪いのか見当もつかない状態です…
    757 : NAME IS - 2014/08/13(水) 11:21:11.73 ID:???.net (+39,-30,-38)
    `adress`か `namae_kanji`で、重複を許さない指定があれば

    INSERT IGNORE INTO `tantousya` (`adress`, `namae_kanji`) VALUE ("Tanaka@", "田中");
    758 : NAME IS - 2014/08/13(水) 11:26:49.58 ID:???.net (+31,-29,-3)
    adressが気になるw
    759 : 753 - 2014/08/13(水) 11:38:40.04 ID:???.net (+68,+29,-75)
    >>757
    プライマリ、ユニークキーを指定というのは至極全うな意見だと思いますが
    今回はサブクエリで制御を考えています。
    サブクエリの勉強中です。

    >>758
    adress フランス語で書いちゃったわけではなくタダのスペルミスorz
    760 : NAME IS - 2014/08/13(水) 11:49:42.87 ID:???.net (+31,-29,-26)
    INSERTにNOT EXISTSは直接使えないので、
    一旦NOT EXISTSを条件にSELECTし、レコードがない場合に
    INSERTすると言うように書かないと無理じゃないかな
    761 : 753 - 2014/08/13(水) 13:05:12.23 ID:???.net (+68,+29,-24)
    >>760
    なるほど、そういう制限があるんですね。
    サブクエリの解説サイト等見直したいと思います。
    ありがとうございました。
    762 : NAME IS - 2014/08/13(水) 21:39:34.24 ID:???.net (+12,-30,-66)
    >>761
    こんな感じかw

    INSERT INTO `tantousya` SELECT 'Tanaka@' AS `adress`, '田中' AS `namae_kanji` FROM DUAL
    WHERE NOT EXISTS (SELECT * FROM `tantousya` WHERE `tantousya`.`adress` = 'Tanaka@');
    763 : NAME IS - 2014/08/16(土) 14:46:49.25 ID:CDUM23fr.net (+0,+0,+0)
    >>200 >>201
    先生たち!それが出来ないんですよ('_;)

    がんばって

    select name_no,sum(rating_point)as vote,
    (select sum(rating_point) from rating_tb WHERE DATE_ADD(date, INTERVAL 5 HOUR) > NOW())as active
    from
    rating_tb
    group by name_no;

    上のようにやってみたら、activeが合計値が出て個別にならなくて、初心者で全然ここから打開出来ないです;;
    ↓こんな風にしか出来ない初心者です。お助けください。お願い致します。
    +---------+------+--------+
    | name_no | vote | active |
    +---------+------+--------+
    | 1 | 232 | 47 |
    | 2 | 199 | 47 |
    | 6 | 107 | 47 |
    | 9 | 87 | 47 |
    | 10 | 89 | 47 |
    | 11 | 95 | 47 |
    | 12 | 46 | 47 |
    | 13 | 42 | 47 |
    | 14 | 27 | 47 |
    | 15 | 26 | 47 |
    | 16 | 17 | 47 |
    | 17 | 19 | 47 |
    | 19 | 6 | 47 |
    | 20 | 12 | 47 |
    | 23 | 6 | 47 |
    | 24 | 8 | 47 |
    | 25 | 7 | 47 |
    | 27 | 9 | 47 |
    | 34 | 1 | 47 |
    | 35 | 7 | 47 |
    | 45 | 3 | 47 |
    764 : NAME IS - 2014/08/16(土) 14:47:20.39 ID:???.net (+57,+29,-2)
    ↑ 間違えて投稿してしまいました。お詫びいたします
    767 : NAME IS - 2014/08/16(土) 19:06:38.82 ID:JcjcV7DkE (-26,+23,-45)
    ↑先ほど書いたものですけど、
    セキュリティーは「MySQLサーバは起動していないか、ファイアウォールでブロックされています!」
    と記述されてます。
    768 : NAME IS - 2014/08/18(月) 01:33:19.66 ID:???.net (-1,-29,-30)
    サブクエリでなく case when でやればいい
    769 : NAME IS - 2014/08/20(水) 10:26:28.50 ID:4cvw8JQq.net (-23,-11,-3)
    保守
    770 : NAME IS - 2014/08/20(水) 15:36:50.55 ID:???.net (+48,+30,+0)
    771 : NAME IS - 2014/08/23(土) 08:23:32.99 ID:???.net (+63,+30,-298)
    au氷水ディレクター戦争タイステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらい山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり塩肉マンつばめの巣担々麺野菜炒めラーメン

    au氷水ディレクター戦争タイステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらい山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり肉マンつばめの巣塩担々麺野菜炒めラーメン

    au氷水ディレクター戦争タイステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらい山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり肉マンつばめの巣塩担々麺野菜炒めラーメン

    ニンニクヤーフォー低額土地NHK名古屋遅延電池切れ福岡損保新規駐車近代ゲームフジワイプ転職提案ラーメン
    abk公式漏洩安保険王なにあげてんだよ?「わー!ふーう?」↓↓★★↓↓宿題通調印鑑カウントダウン息子議員国会大学生
    772 : NAME IS - 2014/08/23(土) 08:29:23.54 ID:???.net (+49,+26,-24)
    お大事に
    つ お薬
    773 : NAME IS - 2014/08/24(日) 11:30:58.34 ID:???.net (+0,+0,+0)
    質問させてください。

    大したアクセス数もないのに1ページを表示するのに1秒から2秒ほどかかっています。
    DBサーバーとアプリケーションサーバーを切り分けると早くなる聞いたので、さくらVPSのローカル接続を利用し試しましたが、やはり遅いままです。

    ボトルネックはMySQLサーバーの設定もしくはクエリそのものにあるのかもしれません。。。

    さくらVPS SSDプラン
    メモリ2GBで、DBはMySQL5.1の場合
    以下のmy.cnfの設定は適正だと言えますか?
    これを修正することで早く出来るようであれば教えていただけませんか?

    [mysqld]
    port = 3306
    socket = /var/lib/mysql/mysql.sock
    skip-external-locking
    key_buffer_size = 512M
    table_cache = 256
    tmp_table_size = 256MB
    join_buffer_size = 1M
    thread_cache = 8
    thread_concurrency = 8
    thread_cache_size = 60
    query_cache_size = 32M
    max_connections = 100
    max_allowed_packet = 1M
    table_open_cache = 256
    sort_buffer_size = 4M
    net_buffer_length = 8K
    read_buffer_size = 1M
    read_rnd_buffer_size = 512K
    myisam_sort_buffer_size = 8M
    character_set-server=utf8
    innodb_buffer_pool_size=384M
    innodb_log_file_size=128M
    slow_query_log=ON
    slow_query_log_file=mysql-slow.log
    long_query_time=1
    774 : NAME IS - 2014/08/24(日) 11:31:36.33 ID:???.net (+3,-30,-141)
    続き(長々となってすみません)

    [mysqldump]
    quick
    max_allowed_packet = 16M

    [mysql]
    no-auto-rehash
    default_character_set=utf8

    [myisamchk]
    key_buffer_size = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M

    [mysqlhotcopy]
    interactive-timeout
    775 : NAME IS - 2014/08/24(日) 12:00:26.86 ID:???.net (+31,-30,-98)
    ワードプレス?
    innodb_buffer_pool_sizeは総メモリの7~8割割り当てろとか言われてる
    key_buffer_sizeは64Mぐらいになりそう

    sort_buffer_sizeとかが多すぎる
    スレッドバッファで調べてみるといい

    mysqltuner使ったらだいたい教えてくれる
    後エラーログに色々出てるはずだからそれを見る
    776 : NAME IS - 2014/08/24(日) 12:05:18.91 ID:???.net (+0,-29,-31)
    >>775
    いえRuby on Railsというフレームワークを使って自分で1から組んでいます
    777 : NAME IS - 2014/08/24(日) 12:10:04.22 ID:???.net (+0,-29,-30)
    >>775
    ありがとうございます

    それとMySQL5.1なんですが5.5に上げておいたほうが利点とかありますか?

    MySQLTunerは5.5以降の対応みたいですね
    778 : NAME IS - 2014/08/24(日) 12:41:40.88 ID:???.net (+25,-29,-40)
    MySQLTunerは5.1で使えるよ
    http://mysqltuner.com/

    新しいバージョンのほうが当然性能は向上してるし
    問題ないなら5.5/6使う方がいいと思う
    779 : NAME IS - 2014/08/24(日) 13:19:13.05 ID:???.net (+85,+17,+0)
    >>778
    ありがとうございます
    試してみます
    780 : NAME IS - 2014/08/24(日) 13:25:30.23 ID:???.net (+18,-29,-13)
    5.5より5.6
    5.7はたいした変更ないけど5.5と5.6はクエリによっては大違いだぞ
    781 : NAME IS - 2014/08/26(火) 14:31:57.07 ID:???.net (+70,-30,-279)
    MySQLで大量のデータ計算させるのに適切なアプリケーションに迷っておりアドバイスあれば教えて下さい。
    以前Accessに株価データ入れてVBAで分析みたいなことやってたんですがレコード数が150万ぐらいになるので、MySQL5.6+Access2010に作り直してみたんです。
    ・ODBC接続してリンクテーブルをAccess内に張り、それに対して操作
    ・VBAのADOでMySQLテーブルをレコードセットして、それに対して操作
    ・Accessで計算し、結果をSQL文にしてMySQLに投げる操作
    ・Accessで計算し、結果をローカルテーブルに書いて最後にテーブルを転送
    などやってみたんですが、どれもAccessローカルテーブルに直接操作するよりパフォーマンスが落ちます。
    MySQLのクエリ自体は高速なのですがInsert/UpdateをODBC経由やADO接続でやりとりするところがボトルネックみたいで。
    PHPとかRubyとかで処理するとそういう問題は少ないのでしょうか。
    782 : NAME IS - 2014/08/28(木) 00:15:59.00 ID:???.net (+69,+29,-18)
    >>781
    すくないよ
    エンジニアに金はらって作ってもらいな
    783 : NAME IS - 2014/08/28(木) 00:55:32.51 ID:joeF3rjv.net (+33,+29,-44)
    結果セットが大量すぎてコピーが遅いならわかるけど
    更新処理が遅いのはよくわからんな。
    ADOならちゃんとパラメータのバインドとか使えば
    そうそう遅くならない
    784 : NAME IS - 2014/08/28(木) 01:20:19.39 ID:???.net (+76,+29,-49)
    >>781
    どこにボトルネックがあるのかそれだけじゃ判断つかないし、
    まずはマシン構成と、AccessだけのときとMySQLを使ったときで
    どのくらい差があるのか、定量的に示すべき。
    785 : 775 - 2014/08/30(土) 18:45:50.75 ID:???.net (+23,-30,+0)
    >>782
    自分が素人なのは分かってますが、金出すほど複雑なことじゃないしあとで我流の指標とか色々いじりたいのよね・・・

    >>783
    それはストアドプロシージャ使ってVBAからはCallするだけって感じでしょうか?

    >>784
    やっていることを単純化すると下記みたいになります。
    下記のプログラムでconnectionをMySQLにして1分43秒、 レコードセットOpenするところのcnnを CurrentProject.Connectionに変えてAccess内のテーブルにすると4秒でした。
    銘柄コード1301~1999の149,257レコードに対する更新です。
    PC一台(i7-3770@3.4GHz, 16GB, Win7 64bit)にAccess2010とMySQL5.6インストールしています。
    indexやprimary keyは同じAccess内とMySQL内のt_dbに対するUpdateですが、Conndection変えるだけで20倍以上の差になって驚いています。

    t_dbテーブルはある銘柄のある日で特定の1レコードを表し、フィールドは[終値]と[id]と[前日終値]があり、[終値]と[id]は既に入力済み。ここでは[前日終値]を埋めていきたい。
    idは銘柄コード4桁+営業日コード5桁で、ソートすると銘柄順、営業日順になります。(同一銘柄-例えば1301だと、130100001,130100002,130100003・・・と営業日順に連番になり、銘柄が変わると数字が飛びます)
    idでソートしたt_dbを順番にmovenextしながら、前日のレコードにあった終値を[前日終値]フィールドにUpdateしてます。

    Sub test()
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim preDayID As Long
    Dim preClosePrice As Double
    Dim sqlStr As String
    cnn.Open "Driver={MySQL ODBC 5.3 Unicode Driver};" & _
    "Server=hogehoge;" & _
    "Database=hogeDB;" & _
    "Uid=hoge;" & _
    "Pwd=hage"
    strSQL = "SELECT 終値, id, 前日終値 FROM t_db where id between 130100000 and 200000000 order by id"
    rst.Open strSQL, cnn, adOpenForwardOnly, adLockPessimistic

    Do Until rst.EOF
    If rst("id") = preDayID + 1 Then
    rst.Update "前日終値", preClosePrice
    End If
    preDayID = rst("id")
    preClosePrice = rst("終値")
    rst.MoveNext
    Loop
    rst.Close
    cnn.Close
    End Sub
    786 : NAME IS - 2014/08/30(土) 19:44:19.23 ID:???.net (+16,-30,-51)
    ADOでの更新が遅い理由は判らないけど(ODBCの設定、カーソルタイプ、ロックタイプのどれかが影響?)
    提示された処理であればSQL一発で大丈夫かと

    UPDATE t_db a
    INNER JOIN t_db b ON a.id = b.id + 1
    SET a.前日終値 = b.終値
    WHERE id BETWEEN 130100000 AND 200000000
    787 : 780 - 2014/08/30(土) 19:45:47.62 ID:???.net (-1,-29,-8)
    ごめん、最後エイリアスつけ忘れ
    WHERE id BETWEEN 130100000 AND 200000000

    WHERE a.id BETWEEN 130100000 AND 200000000
    788 : NAME IS - 2014/08/30(土) 21:38:04.16 ID:???.net (+5,-29,-46)
    >>785
    15万件弱のレコードをMySQLからAccessに取り込んで、1件ずつupdateループ回してるってことか。
    更新したいだけならMySQL側だけで完結するように >>786 のやり方が良いと思われ。
    789 : NAME IS - 2014/08/30(土) 21:45:54.79 ID:???.net (+8,-29,-35)
    >>785
    ループで毎回updateではなく、抜けたあとでUpdateBatchとかダメだろうか?
    http://msdn.microsoft.com/ja-jp/library/cc364237.aspx
    790 : NAME IS - 2014/08/30(土) 21:56:05.06 ID:39pGGgY4.net (+31,+29,-43)
    SQL1発で済むならそれが一番だが、無理なら
    http://blog.livedoor.jp/it_ikiru/archives/50422207.html
    みたいなやり方てバインド使った方がいいよ
    レコードセットは内部的にコピー持ってSQL発行してるだけだから
    791 : NAME IS - 2014/08/31(日) 01:22:59.31 ID:???.net (+81,+29,-44)
    ところでコードを貼るならgist使わね?
    gistならログイン不要で匿名でスニペット貼り付けられる。
    こっちに貼ると行数制限やらタブが消えるやらの問題があるので見づらいし使いづらい。
    ちなみに先のコードならこんな感じ。
    http://gist.github.com/anonymous/9c2a408bab050f89469d
    例示用に勝手に使ってすまぬ >779
    792 : NAME IS - 2014/08/31(日) 04:32:01.79 ID:???.net (+36,-30,-48)
    質問させてください

    phpMyAdminで MySQLのデータベースを管理しています。

    yumで新しめのphpMyAdminに入れ替えました。

    それ以降というもの
    20テーブルほど、それぞれ20MB~100MBはあり合計270MBとなっています。

    しかし、データベースをまるごとエクスポートすると8MBのサイズになりダウンロード完了と出てしまいます。

    なぜでしょうか?
    793 : 775 - 2014/09/01(月) 10:29:36.44 ID:???.net (+19,-29,-235)
    775,779の件みなさんありがとうございます。
    >>786-782
    4秒でした。圧倒的に早いですね。これならAccess単独のVBAループ処理に匹敵できます。
    >>789
    UpdateBatch1分20秒でした。レコードセットアップデートのループより2,3割早かったです。
    非接続にしたレコードセットのループ部分は1秒無いぐらいなのにUpdateBatchでほとんどの時間食ってました。
    >>790
    パラメーターマーカーの方法も1分20秒でした。
    >>791
    掲示板でコード示すとき便利そうですね。今後使わせていただきます。

    他にも色々やったのですが、ループ毎にUpdate文を文字列で組み立ててcnn.Executeするやり方で1分10秒ほどなのがせいぜいでした。
    シーケンシャルにカーソル動かしながら処理していくプログラミングに慣れてたのでSQL一発文組み立てるの苦手だったのですが、これだけ圧倒的パフォーマンスだと使わざるを得ないですね。
    なんとかその方向でやってみます。
    794 : NAME IS - 2014/09/01(月) 12:44:14.79 ID:???.net (+62,+29,-11)
    >>792
    環境やらバージョンやら、具体的にどういう操作を
    したのかやら、書かないと誰もわかんねえよ
    795 : NAME IS - 2014/09/01(月) 22:52:44.61 ID:???.net (-1,-29,-32)
    mysql 5.5.21
    select ~ into outfile でテーブルの内容をファイルに書き出せはしますが、その時に
    カラム名をヘッダとして先頭に出す…なんてことは出来ないんでしょうか
    796 : NAME IS - 2014/09/01(月) 23:10:22.91 ID:EfQ/kLTT.net (-22,-29,-2)
    797 : NAME IS - 2014/09/01(月) 23:34:35.31 ID:???.net (+54,+29,+0)
    >>796
    あぁそういう手があったか
    ありがとうございます
    798 : NAME IS - 2014/09/02(火) 00:51:32.76 ID:???.net (-2,-20,-1)
    3
    799 : NAME IS - 2014/09/12(金) 22:35:04.80 ID:???.net (+3,-30,-143)
    mysql 5.6.20

    mysqldumpで個々のデータベースのバックアップを取ろうとしているのですが、

    mysqldump performance_schema -u root -p > c:/pf.sql

    performance_schemaとinformation_schemaで以下のエラーが出ます

    mysqldump : Got error: 1142 SELECT, LOCK TABLES command denied to
    user 'root'@'localhost' for table 'accounts' when using LOCK TABLES

    回避しつつバックアップを取る方法とかってありますか?
    ちなみに出来たファイルの中身はコメントだけでした
    800 : NAME IS - 2014/09/12(金) 23:05:15.89 ID:???.net (+4,-29,-33)
    ORACLEにはPL/SQLにPACKAGEがありますが、それに相当する機能ってありますか?
    ストアド使わないシステムを作ったこと無いんですが、MySQLはストアド使わなくても速いですか
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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