のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,695,971人
昨日: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一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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