バッククォートってキーボードでどうやって入力すればいいのでしょうか。 Shift+@ と昨日教わりましたが、 ‘ このように表示されてしまいます。 なお、IMEはPCに入っていたものを使っています。
` ←Shift + @ ‘ ←IME on で Shift + @ 結論:IME切れ、ハゲ
IMEを切れとのことですが、切るとはどのような行為を示していますか? 切るとハゲに関係があるのかしらん?
つまらない事聞きますけど、「PC用」「携帯用」とフィールドを分けるとき、 どういうフィールド名にしていますか? 電話番号の場合、telはPC用として、携帯はmobile_tel?ktai_tel?
サーバのバージョン: 5.1.44-community MySQL クライアントのバージョン: mysqlnd 5.0.5-dev とかいうときMySQL Connector Netはどのバージョンをインストールしたらいいのでしょうか?
>>930 そのSQLでUSE INDEXでdateとpriceの複合インデックスを指定するか、
WHERE句にprice>0を追加することで、インデックスを使ったソートが出来ました。
大変助かりました。本当にありがとうございます!
940 :
NAME IS NULL :2011/06/04(土) 11:23:45.20 ID:m9IbrQpl
941 :
NAME IS NULL :2011/06/04(土) 11:35:47.08 ID:m9IbrQpl
>>941 なんかオプションをつけるとだいたいインデックスがつく
主キーにはインデックスをはらなくてもって、 主キーこそがインデックスだと思うんだが、 自分の認識間違ってるのか。
お次の質問どうぞ。
正規化によって繰り返し項目を別表に分けた後は、どのように結合すればよいでしょうか?? SQL文を2つに分けたら解決しますが、1つで出来ないでしょうか? table1 id,table2id,name table2 id,data table1id name data1 data2... 1 'abc' 'abcの趣味1' 'abcの趣味2'...
>>937 Connector/Net, Connector/Jはクライアントライブラリ使わないので、サーバ側にあわせて何でもよいよ。
サーバ側5.1ならConnector/Netの最新版(6.3.6)でいいんじゃね?
>>948 ありがとうございます!
結果も1行で取得したいのですが、不可能でしょうか?
それともleft join等で複数行で取得するのが一般的でしょうか?
基本的には複数行で取得するのが一般的だな。 どのみち「abcの趣味」が複数あるわけだからプログラム側でうまく処理すればいい。
>>950 ありがとうございます!
プログラム側で対処する事にします!
952 :
NAME IS NULL :2011/06/07(火) 19:23:07.61 ID:Maj1FVhL
大量のSQL文の処理が終わらない…
処理を速くする方法はあるでしょうか?それとも根本的に何か間違えているのでしょうか…
http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-categorylinks.sql.gz このファイルは解凍すると500MBになり、最初の40行でテーブルを作成して
以下INSERTを繰り返すSQL文になっています
http://pastebin.com/7s10E71y localhostでこのsqlファイルを処理してるんですが1時間たっても終わらない…
こんなものでしょうか?
以下MySQLの使用環境です
mysql-5.1.49-3
OS: Linux (debian-squeeze)
以下実行したコマンドです
$ mysql -u user userdb < jawiki-latest-categorylinks.sql
<処理が終わらない>
最初の41行文(INSERT2行)だけならすぐに処理が終わり、SELECTで読み込まれていることが確認できました
$ head -n41 jawiki-latest-categorylinks.sql > test.sql
$ mysql -u user userdb < test.sql
500MBでしょ?5時間もすればおわるでしょ
>>952 見てないけど、sql文のはじめの方でインデックスを作成してる場合は、インデックスを作成せずに create table をやると多少というかかなり速くなる
で、タプルが全部 insert された後にインデックスを追加する
(たぶん、sqlファイルの最初のcreate table 文でキーの指定をしてるので、それを全部取り除く)
あと、ファイルサイズと関係なく、MySQLはタプル(行、レコード)の数が10万を超えると、検索の方も遅くなって使い物にならなくなるので、タプルが10万を超える場合は、かなり慎重に設計や最適化をする必要がある
(ちゃんとやれば、10万以上でもそれなりに速く動く)
>>952 のダンプデータは本当に MySQL のダンプなのでしょうか?
>>955 そりゃRFC違反だからな。弾きもするだろ。
957 :
952 :2011/06/07(火) 23:53:22.36 ID:???
>>953 まさに5時間ぐらいでした
こんなものなのかー
インデックス削れば速くできますよね、ありがとう気づかなかった
2分48秒でロードできたよ MySQL 5.5.11、Core i5-2400S、Intel X25-M G2 120GB innodb_buffer_pool_size = 2G
>>954 タプルってtableのこと?
そういう読み方流行ってんの?
>>958 Innodb なら log buffer sizeも関係ありそう?
まぁ、質問主がどんなSQLなんかわからんけど、1行ずつ入れると遅いし
insert .... values(),(),()
は常識だよな?
10万程度ならインデックスなくてもそれなりに早いよな。
962 :
952 :2011/06/08(水) 01:22:45.04 ID:???
ありがとおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお!
innodb_%_size 弄ったら劇的に速くなった!!
試しに↓でやってみたら5時間かかってたのが12分で終わった!インデックス削れば更に速くなるかもです。
[mysqld]
innodb_buffer_pool_size = 512MB
innodb_log_file_size = 128M
他にも複数コア使う設定とかもあるのかな?CPUパワーあまり使ってくれてない感じがする…
wikipediaが配布してるデーター読みたくてMySQL使い始めたんですが、
他にも良さそうな設定あればヒント頂けるとありがたいです。
>>960 こんなSQLでした。
http://pastebin.com/7s10E71y
>>962 Wikipediaのデータで遊びたいなら全文検索あったほうがよくないか?
それならMyISAMになるが。日本語だとちょいと工夫がいるけど。
groongaとかで遊んで見たら?
5時間が12分に短縮って、、、、 w
>>959 釣りだと思うけどw
タプル=セット=組=レコード一件
タプルって呼び方はPostgreSQLの人がよく使う印象
ID | NAME 1 | a 2 | a 3 | b 4 | c NAMEが重複しないIDを取得したいのですが SELECT DISTINCT NAME FROM テーブル名 だとNAMEしか取得できなくて困っています。 すごく初歩的なことかと思うのですがヒントだけでも教えてください。 お願いしますm(__)m
>>967 SELECT ID,NAME FROM unko GROUP BY NAME;
MySQL以外じゃろくに動かないから注意な
タプルはtupple 英語だとテュープルに近いw
970 :
967 :2011/06/08(水) 15:02:33.22 ID:???
>>967 ありがとうございました。
GROUP BYですね。
勉強してきます!!
971 :
967 :2011/06/08(水) 15:03:39.45 ID:???
あ、安価間違いましたorz
>>968 さんありがとうございました。
>>962 他の設定次第だけど insert が多い場合は
set global innodb_flush_log_at_trx_commit=0
も速くなるよ。
これするとクラッシュしたときデータが当てに
ならなくなるので大量の insert などが終わったら
set global innodb_flush_log_at_trx_commit=1
で元に戻しておいたほうがいい。
# 手元の開発環境とかならお好きに
本番環境でも大量にある参照用スレーブとかは
この設定にしておくとレプ遅延が起こりにくかったりする。
>>965 ,966,969
「ブ」じゃなくて「プ」なのか。タプルって用語を知らなかった。
>>956 RFC5321 4.1.2. を読んで言ってるんだろうね?
>>974 そりゃもちろん。メール絡みのRFCは全て読んだよ。
まあここはMySQLのスレだから これ以上は屋上いこうか。
>>975 顔から火が出るほど恥ずかしくなって屋上から飛び降りるってか?
読んだだけでまるで理解していないというのはかなりたちが悪いんだよね。
何事も半可通が一番迷惑なんだよ。
id, col, value 1, n, apple 1, c, red 2, n, banana 2, c, yellow 3, n, grape 3, c, green 3, w, 100 のような、各ID番号、列記号、値の入ったテーブルがある時、 id, n, c, w 1, apple, red, NULL 2, banana, yellow, NULL 3, grape, green, 100 のような出力を得たければ、どうするのが定石でしょうか。
ドットを使うくらいじゃRFC違反にはならないからね
>>978 たぶんこんな感じ。
select a.id, a.value, b.value, c.value
from table a left join table b left join table c
where a.id=b.id and a.id=c.id
>>980 やっぱり列の数に応じて必要なだけjoinするしかないんですかね…。
982 :
980 :
2011/06/09(木) 20:20:01.68 ID:??? 間違えた。こうか? select a.id, a.value, b.value, c.value from table a left join (select * from table where col='n') b left join (select * from table where col='c') c where a.id=b.id and a.id=c.id;