のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,734人
昨日: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

    751 = :

    じゃあ遠慮無く1テーブルで管理するわ。
    データベースの種別とかで調べてたら速度云々で色々と描かれてるのを見て不安になってたんでな。

    752 = :

    データの入れ物や、データ出し入れする行為を意識しなくてよいのがDBMSのよいところの一つなのに、
    それを分割してわざわざプログラム側で入れ物を区別するのも滑稽でしょ。
    億・兆オーダーになったら、パーティションを検討してみるのがいいと思う。

    753 = :

    上記関連事項について質問させてください。
    現在、80万レコードで90MBほどのテーブルがあり、一箇月に10万レコードのペースで増えています。
    レンタルサーバー(coreserver-mini)のMySQLを利用しているのですが、
    どれくらいのレコード数まで順調に動作するものでしょうか?
    300万レコードくらいまで快適に動作すればいいと思うのですが、
    それまで問題ないでしょうか?よろしくお願いします。

    754 = :

    問題ないよ
    って言われたら信じるの?
    サポートに聞きなさい

    755 = :

    >>754
    間違いの無いご回答ありがとうございます。
    全くおっしゃる通りです。
    ありがとうございました。

    756 = :

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

    `adress`か `namae_kanji`で、重複を許さない指定があれば

    INSERT IGNORE INTO `tantousya` (`adress`, `namae_kanji`) VALUE ("Tanaka@", "田中");

    758 = :

    adressが気になるw

    759 = :

    >>757
    プライマリ、ユニークキーを指定というのは至極全うな意見だと思いますが
    今回はサブクエリで制御を考えています。
    サブクエリの勉強中です。

    >>758
    adress フランス語で書いちゃったわけではなくタダのスペルミスorz

    760 = :

    INSERTにNOT EXISTSは直接使えないので、
    一旦NOT EXISTSを条件にSELECTし、レコードがない場合に
    INSERTすると言うように書かないと無理じゃないかな

    761 = :

    >>760
    なるほど、そういう制限があるんですね。
    サブクエリの解説サイト等見直したいと思います。
    ありがとうございました。

    762 = :

    >>761
    こんな感じかw

    INSERT INTO `tantousya` SELECT 'Tanaka@' AS `adress`, '田中' AS `namae_kanji` FROM DUAL
    WHERE NOT EXISTS (SELECT * FROM `tantousya` WHERE `tantousya`.`adress` = 'Tanaka@');

    764 = :

    ↑ 間違えて投稿してしまいました。お詫びいたします

    770 = :

    http://jobinjapan.jp/job-listing/keyword-mysql.html

    771 = :

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

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

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

    ニンニクヤーフォー低額土地NHK名古屋遅延電池切れ福岡損保新規駐車近代ゲームフジワイプ転職提案ラーメン
    abk公式漏洩安保険王なにあげてんだよ?「わー!ふーう?」↓↓★★↓↓宿題通調印鑑カウントダウン息子議員国会大学生

    772 = :

    お大事に
    つ お薬

    774 = :

    続き(長々となってすみません)

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

    ワードプレス?
    innodb_buffer_pool_sizeは総メモリの7~8割割り当てろとか言われてる
    key_buffer_sizeは64Mぐらいになりそう

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

    mysqltuner使ったらだいたい教えてくれる
    後エラーログに色々出てるはずだからそれを見る

    778 = :

    MySQLTunerは5.1で使えるよ
    http://mysqltuner.com/

    新しいバージョンのほうが当然性能は向上してるし
    問題ないなら5.5/6使う方がいいと思う

    779 = :

    >>778
    ありがとうございます
    試してみます

    780 = :

    5.5より5.6
    5.7はたいした変更ないけど5.5と5.6はクエリによっては大違いだぞ

    781 = :

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

    >>781
    すくないよ
    エンジニアに金はらって作ってもらいな

    783 :

    結果セットが大量すぎてコピーが遅いならわかるけど
    更新処理が遅いのはよくわからんな。
    ADOならちゃんとパラメータのバインドとか使えば
    そうそう遅くならない

    784 = :

    >>781
    どこにボトルネックがあるのかそれだけじゃ判断つかないし、
    まずはマシン構成と、AccessだけのときとMySQLを使ったときで
    どのくらい差があるのか、定量的に示すべき。

    785 = :

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

    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

    788 = :

    >>785
    15万件弱のレコードをMySQLからAccessに取り込んで、1件ずつupdateループ回してるってことか。
    更新したいだけならMySQL側だけで完結するように >>786 のやり方が良いと思われ。

    789 = :

    >>785
    ループで毎回updateではなく、抜けたあとでUpdateBatchとかダメだろうか?
    http://msdn.microsoft.com/ja-jp/library/cc364237.aspx

    790 :

    SQL1発で済むならそれが一番だが、無理なら
    http://blog.livedoor.jp/it_ikiru/archives/50422207.html
    みたいなやり方てバインド使った方がいいよ
    レコードセットは内部的にコピー持ってSQL発行してるだけだから

    791 = :

    ところでコードを貼るならgist使わね?
    gistならログイン不要で匿名でスニペット貼り付けられる。
    こっちに貼ると行数制限やらタブが消えるやらの問題があるので見づらいし使いづらい。
    ちなみに先のコードならこんな感じ。
    http://gist.github.com/anonymous/9c2a408bab050f89469d
    例示用に勝手に使ってすまぬ >779

    792 = :

    質問させてください

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

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

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

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

    なぜでしょうか?

    793 = :

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

    >>792
    環境やらバージョンやら、具体的にどういう操作を
    したのかやら、書かないと誰もわかんねえよ

    797 = :

    >>796
    あぁそういう手があったか
    ありがとうございます

    799 = :

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

    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一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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