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

私的良スレ書庫

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

元スレ【この先一体】MySQL 総合 Part15【どうなるの】

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
401 : NAME IS - 2009/06/26(金) 23:02:37 ID:??? (+19,-30,-168)
最近必要に迫られDBをいじっています。
で、使用しているのはwindows版のmysql4.2です。

現在100万レコードでTELNO char(11)にNORMAL インデックスを張っています。
この中から連続する6桁の数字で終るデータを探すとき

(A) TELNO Like '%000000' or TELNO Like '%111111' or ~略~ TELNO Like '%999999'
(B) REGEXP (000000$|111111$|~略~|999999$)

(A)の方がかなり早いようなんですが、チューニングが悪いんでしょうか?
それとも正規表現は処理速度が遅いんでしょうか?
402 : NAME IS - 2009/06/26(金) 23:10:13 ID:??? (+58,+30,-41)
>>399
こんなのが公表されてんだ、あいつらにとっちゃ好都合なもんだよな。探す媒体を増やすのは分かるが、どうなんかねえ
403 : NAME IS - 2009/06/27(土) 00:58:12 ID:mPR9r3bl (+5,-29,-75)
パフォーマンスが悪くなってshow processlistしてみたら
数十秒かかってるLockedなプロセス(INSERT文、UPDATE文)がいくつもあるんですが
どのような原因が考えられr、どう対処したらよいでしょうか?
なるべくKILLはしたくないです
404 : NAME IS - 2009/06/27(土) 09:11:35 ID:??? (+0,-30,-92)
>>401
インデックスが効くのは完全一致か前方一致検索だけ。
つまり LIKE '000000%' ならインデックスが効くけど
LIKE '%000000' はインデックスが効かない。
末尾6桁だけからなる新しいカラムを追加しよう。

>>403
UPDATE文が効率が悪くなっている可能性がある。
UPDATE文をSELECT文に書き換えてEXPLAINを取ってみる。
406 : NAME IS - 2009/06/27(土) 16:37:33 ID:??? (+54,+29,-20)
>>403
全然つかっていないのに無意味にINDEX張っているとかいう可能性は?
407 : NAME IS - 2009/06/27(土) 17:04:43 ID:??? (+14,-12,-1)
>>403
KILLより再起動が基本だね。
410 : NAME IS - 2009/06/28(日) 13:30:52 ID:??? (-18,-29,-1)
>>409
ヒント: パーティション
411 : NAME IS - 2009/06/28(日) 15:37:55 ID:6HSkCWFH (-27,+25,-34)
>>410
パーティションしてます。
一つのドライブをCとDに分けても
別々のドライブCとEに指定しても
並列して書き込めませんでした。
エラーが出ないならできるのかと思ったのですが。
412 : 401 - 2009/06/29(月) 22:12:20 ID:??? (+57,+29,-25)
>>404
週末留守にしていたので大変遅れました。
後方一致ってインデックス効かないんですね。
別切り出ししてやってみたいと思います。
413 : NAME IS - 2009/06/30(火) 00:27:55 ID:??? (+4,-24,-28)
>>403
Locked じゃなくて、長時間かかっているクエリが原因
414 : NAME IS - 2009/06/30(火) 17:49:30 ID:??? (+0,-27,-4)
datadirは一つだけど、その中のサブディレクトリを
別のドライブに移動することができるよ
415 : NAME IS - 2009/06/30(火) 22:54:48 ID:??? (+106,+30,-89)
MySQLの本いろいろ見たんですが、解らん事あるのでお知恵をください。

データをインポートする場合です。
csv形式固定長で1レコード毎に改行コードが入る場合はすんなり行くのですが、これ
が、未改行の場合のインポートの仕方が解らないのです。

別会社のシステムで吐き出すため、改行入れてくれとも言えず、仕方ないので自前で
改行挿入するプログラムを噛ませて取り込んでいるのですが、そのまま出来ないもの
かと思いまして。

こう定義すれば出来るとか、それは出来ないとか教えてもらえれば幸いです。
416 : NAME IS - 2009/07/01(水) 00:46:51 ID:??? (+76,+28,-14)
>>415
レコードの区切り文字が改行コードでない?
じゃあレコードは何で区切られてるの?
417 : NAME IS - 2009/07/01(水) 02:30:31 ID:??? (+56,+28,-3)
だからカラム数で区切られてないんじゃないの?
418 : NAME IS - 2009/07/01(水) 02:52:57 ID:??? (+8,-24,-57)
なんで、だからなのかな。
汎用機からエクスポートされたデータでパディング付きの固定レコード長だったり、
単に LF 以外の文字を改行マークとしている事を改行コードが無いと言ってるだけかもよ。

後者なら LINES TERMINATED BY で済むかもしれないけど、前者なら…
421 : 415 - 2009/07/01(水) 23:11:09 ID:??? (+13,-30,+0)
>>416-418
舌足らずで申し訳ないです。
例えば、以下のような感じです。

項目A char(10)
項目B char(15)
項目C char(05)
項目D char(40)

だとすると

ホスト出力ファイルは全ての項目が固定長で
項目A,項目B,項目C,項目D,項目A,項目B,項目C,項目D,~略~項目A,項目B,項目C,項目D[EOF]

コレを自前で
項目A,項目B,項目C,項目D\n
項目A,項目B,項目C,項目D\n
項目A,項目B,項目C,項目D\n

と変換して取り込んでいるんです。
これでイメージつかめますか?
422 : NAME IS - 2009/07/02(木) 11:33:43 ID:??? (-23,-30,-62)
>>420
うまくいけばindex mergeするかもしれないけど
aとbにそれぞれindexつけて
select ... where a = ?
union
select ... where b = ?
とするのはどう。
OracleでもPostgreSQLでもこの手のクエリは苦手
424 : NAME IS - 2009/07/02(木) 23:59:25 ID:zf5eYLXR (+26,+29,-14)
>>422
ありがとうございます。なかなか難しいですね。
unionという手もあるんですね。有難う御座います。試してみます。
426 : NAME IS - 2009/07/04(土) 23:14:23 ID:??? (+48,-30,-72)
MySQL4.1-->5.0にして戸惑ったんで質問です。
テーブルaにカラム1~9があると仮定します。
MySQL4.1では、カラム1~7のみデータをinport出来ていたのですが、
5.0だとカラム8~9も追加したカラム1~9からなるデータでないとinport
できませんでした。
仕様変わったんですか?
まぁ正確なデータを作成していないのが悪いんですが、ファイル作成
プログラム作り直したりと、かなり不便ですねぇ。
427 : NAME IS - 2009/07/05(日) 16:22:01 ID:??? (+33,-29,-19)
>>426
カラム名を1..7だけ指定してimportすれば済む話じゃね?
428 : NAME IS - 2009/07/05(日) 22:17:09 ID:??? (+64,+29,-8)
>>426
カラム名指定でインポートなんて出来るんですか(知らんかったです
web徘徊してやり方覚えてきます。
429 : NAME IS - 2009/07/05(日) 22:18:01 ID:??? (+62,+29,-28)
レス番、間違った。
>>427だった、自分にresしてどうするw
430 : NAME IS - 2009/07/06(月) 17:02:45 ID:??? (+2,-30,-82)
キーがユニークキーがひとつのとき、
fld1 char(10) uniqueと書くのと、
primary key(fld1)と書くので
何か性能面等で違いは出ますか?
431 : NAME IS - 2009/07/08(水) 06:19:53 ID:??? (-1,-29,-6)
>>430
InnoDBならPrimary Keyの方が速い

これを読もう
http://www.mysqlconf.com/mysql2009/public/schedule/detail/6661
432 : NAME IS - 2009/07/08(水) 21:59:33 ID:??? (+36,-30,-99)
上でカラム指定インポートの質問したものですが、追加でまた御教示ください。
邪道かもしれませんが、各カラムが日本語名となっております。
上記のインポートの際、
LOAD DATA INFILE "sample.txt" INTO TABLE sample_table (`カラム1`,`カラム2`,~略~,`カラム7`)
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
としてもエラーになります。
カラム指定の場合、日本語表記カラムはNGなんでしょうか?
433 : NAME IS - 2009/07/09(木) 20:58:06 ID:??? (+7,-29,-74)
my.cnfでメモリ周りのチューニングを行おうと思ってます。
現在InnoDBのみ利用しています。
この場合key_buffer_sizeの項目はInnoDBでは全く利用していないということで最小値に設定してまってもいいのでしょうか。
他の部分で少しでも利用分を増やしたいと思っています。
よろしくお願いします。
434 : NAME IS - 2009/07/09(木) 21:20:59 ID:??? (+69,+29,-13)
>>432
エラー内容とか、テーブルのカラムのデータ型とか書いた方がいいと思うよ。
「エラーになった」だけじゃ情報不足かと。
435 : NAME IS - 2009/07/10(金) 06:44:47 ID:??? (+33,-29,-18)
>>433
クエリで内部的にMyISAMのテーブルを作ることがある
1MBぐらいは残しておいたほうがいいよ
436 : NAME IS - 2009/07/10(金) 09:16:01 ID:??? (+32,-29,-33)
ある意味どうでもいい事かもしれませんが、ユニークな項目としてauto incrementを使う事ってあるのでしょうか?
個人的にauto incrementは好きではないのですが・・・。
437 : NAME IS - 2009/07/10(金) 19:41:26 ID:??? (+67,+29,-41)
>>436
>auto incrementは好きではない
気持ちはわかる。
勝手に数字をふられるのが嫌なんだろ。
オレも最初はそうだった。

しかし、今では望んで使う。
レコード固有の一意な識別子としては
とても便利だからだ。

理由や理想じゃない。
我慢してちょっと使ってみろ。
438 : NAME IS - 2009/07/10(金) 20:02:57 ID:??? (-1,-29,-30)
明示的に nextval か auto increment か、という話じゃないのけ?
俺はinsertした後に「さっきの値」を取得するという操作がなんとなく
気に入らない。
439 : NAME IS - 2009/07/10(金) 20:05:48 ID:??? (-6,-29,-1)
sequenceも欲しい
440 : NAME IS - 2009/07/10(金) 22:18:33 ID:??? (+62,+29,-12)
>>435
ありがとうございます!
予期せぬときに影響出そうですね。
多少多めに残しておくことにします。
441 : NAME IS - 2009/07/10(金) 22:43:40 ID:??? (+43,+25,+0)
ようじょ
442 : NAME IS - 2009/07/10(金) 23:14:05 ID:??? (+42,-30,+0)
>>434
内容無さ杉ですね、すみません。
以下のようなテストをしてみました。

使用DBはwindows版の5.0.83-community-nt MySQL Community Editionです。

「test_001」dbに、以下のコマンドでテーブルを作成。

CREATE TABLE `test_tbl` (
`基準日` int(8) NOT NULL default '0',
`業営所コード` int(3) NOT NULL default '0',
`営業所名` varchar(10) default NULL,
PRIMARY KEY (`基準日`,`業営所コード`)
) ENGINE=InnoDB DEFAULT CHARSET=sjis;

dドライブ直下に、以下の内容のtest.csv(基準日、営業所コードのみであり、営業所名はないデータで3レコード)を作成。

20080601,101
20080602,102
20080603,101

以下のコマンドにてインポート処理実施

LOAD DATA INFILE 'd:/test.csv' INTO TABLE test_tbl (`基準日`,`営業所コード`)
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';

で以下のエラーが発生。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'' at line 2

という具合です。
MySQLのHPを見るとSQL文は良い様に思えるのですが、どこか間違っているのでしょうか?

443 : NAME IS - 2009/07/11(土) 06:18:03 ID:??? (+46,-29,-16)
>>442
テーブルのカラム名が"業営所コード"になってるのはタイプミス?

CSVインポートのSQLは"営業所コード"になってるみたいだけど。
444 : 443 - 2009/07/11(土) 06:49:21 ID:??? (+6,-30,-38)
>>442
以下のSQLで行けましたよ。ちなみに環境はwindowsの5.0.82。

LOAD DATA INFILE 'D:/test.csv'
INTO TABLE test_tbl
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(`基準日`,`営業所コード`)
445 : NAME IS - 2009/07/11(土) 09:26:20 ID:??? (+27,-29,-2)
どうタイプミスをしたら業営所になるんだろ(*´д`*)
446 : NAME IS - 2009/07/11(土) 09:35:36 ID:??? (+53,+26,-11)
>>445
そこかよw
447 : 442 - 2009/07/11(土) 22:54:02 ID:??? (+57,+29,-9)
大変申し訳ないです、全く気付きませんでした。
月曜会社行ったら確認してみます(大汗
449 : NAME IS - 2009/07/13(月) 12:57:25 ID:??? (+47,+19,+0)
writeロックかかってるから、待たされるだけだろ。
450 : 442 - 2009/07/13(月) 22:21:37 ID:??? (+69,+29,-60)
無事やりたい事が出来ました。
カラム指定って一番最後でないと駄目みたいですね、>>443さんありがとう。

あ、カラム名が"業営所コード"って具合になってた原因は、navicat for mysql使ってるんですが、
これでテーブル定義すると結構な確立でなるんですよね。
普段はエディタでゴリゴリ書いちゃうんであまり気にしてませんでした(汗
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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