アドバイスをいただければありがたいです。 (グループ化とかいいつつ、結局GROUP BY使わない方法でやってますが…;) 0415NAME IS NULL2009/06/01(月) 23:23:24ID:??? idと更新日のペアがタブっていたらどうするの? 0416NAME IS NULL2009/06/01(月) 23:29:24ID:??? SELECT t1.id, t2.data, t1.max_update AS update FROM (SELECT id, MAX(update) as max_update, MIN(update) as min_update FROM table_name GROUP BY id) t1, table_name t2 WHERE t1.id = t2.id AND t1.max_update = t2.update ORDER BY t1.min_update 0417NAME IS NULL2009/06/02(火) 10:48:25ID:???>>415 idと更新日のペアは一意になるようになっています。
>>416 ありがとうございます! とても勉強になります。 0418NAME IS NULL2009/06/02(火) 11:23:58ID:??? PHP から MySQL を使っています。 SELECT で varchar(2000) の値を取得するときのことなのですが、 PHP 側ではこの値の冒頭200文字程度しか利用しないと分かっているとき、 はじめから SUBSTRING で値を削って取得するメリットは小さいでしょうか?
一般に MySQL で余計な関数を使うと処理が遅くなると聞きますので、 こういった文字列処理は値を取得しておいてPHP側でしたほうがよいですか? なんとなく、あらかじめ削っておけばメモリの消費が抑えられるのではないかという考えがよぎって迷っています。 0419NAME IS NULL2009/06/02(火) 13:02:24ID:??? グループ化についてもう一つ助言をいただきたいのですが…。
こんな感じでいかがかしら。 0421NAME IS NULL2009/06/02(火) 13:51:14ID:???>>419 SELECT * FROM (SELECT * GROUP BY AAA) GROUP BY BBB
ただしAAAでグルーピングした時点でBBBの内容は不定になっている。 これで目的が達成できているか、不明。 0422NAME IS NULL2009/06/02(火) 14:40:11ID:???>>419 不可能。 0423NAME IS NULL2009/06/02(火) 18:38:46ID:???>>419 >AAAとBBBが同一のものをグループ化 えー、そうだっけ? 0424NAME IS NULL2009/06/02(火) 19:28:58ID:??? GROUP BY AAA, BBB がそうだろ? 0425NAME IS NULL2009/06/02(火) 22:06:54ID:???>>419 GROUP BYを入れ子にって、いったいどういう結果を期待してんの? 勝手な言葉で質問しても解釈がまちまちだからごらんの有様だよ。 0426NAME IS NULL2009/06/03(水) 23:00:07ID:???>>420 ありがとうございます!! 0427NAME IS NULL2009/06/17(水) 20:22:30ID:??? accessから移植したいんだけど、最後に;をつけるだけでおk? create tableなんかはtype=InnoDB;つけないとだめ? 0428NAME IS NULL2009/06/17(水) 21:07:07ID:??? データ型そんなに互換性ないだろう 全部見直さないとダメ 0429NAME IS NULL2009/06/17(水) 23:21:33ID:??? access使うようなのがトランザクション処理が必要なのだろうか… myisamでいい気がするがなあ 0430NAME IS NULL2009/06/18(木) 20:31:27ID:???>>428 大幅に見直すのはcreateのところだけじゃ不十分かな? select,insert,updateの構文は;つければ使えない? 0431NAME IS NULL2009/06/19(金) 12:45:53ID:??? selectで、○番目と○番目のレコードを取得、ってしたいんですが、 limitで複雑な指定できませんよね? サブクエリを駆使するしかありませんか?
イメージとしては、こんな感じに指定したいんです。 SELECT * FROM table LIMIT (0, 1 AND 5, 1) 0432NAME IS NULL2009/06/19(金) 12:51:14ID:???>>430 見直しが極めて望ましい。 DBは意外と互換性がないので。 0433NAME IS NULL2009/06/19(金) 12:54:58ID:???>>431 UNIONがおすすめ。
(1つ目のクエリ LIMIT 0,1) UNION (2つ目のクエリ LIMIT 5,1)
いくつ繋げてもindex効くし、綺麗。 0434NAME IS NULL2009/06/19(金) 13:47:54ID:???>>433 ありがとうございます! 各クエリともLIMIT部分以外が同一であっても、 やはりクエリの数だけ走査しなおしてしまうのですよね? 0435NAME IS NULL2009/06/19(金) 17:54:37ID:??? SELECT SUM( p.point ) FROM point_table p GROUP BY p.id ORDER BY SUM( p.p.point ) DESC LIMIT 100
これは、各idのもつpointの合計値を、pointの多い順に上位100件取得するクエリです。 ここで得られるpointの合計値を求めたいのですが、 上のクエリをどのように修正すれば良いのでしょうか? 0436NAME IS NULL2009/06/19(金) 18:43:32ID:???>>434 つ EXPLAIN
また、一時テーブルをつくる方法も。 0437NAME IS NULL2009/06/19(金) 19:38:32ID:???>>436 なるほど、一時テーブルですか。検討してみます。 ありがとうございます! 0438NAME IS NULL2009/06/20(土) 09:28:26ID:???>>430 そのまま移植して動かして見てエラーが出たらなおせばいい 0439NAME IS NULL2009/07/03(金) 12:40:09ID:??? MySQL を勉強中なのですが、クエリの最適化について悩んでいます。
SELECT d.date, i.ip, n.name FROM update_log d LEFT JOIN update_log i USING(id) LEFT JOIN update_log h USING(id) WHERE d.id = 100 AND i.ip IS NOT NULL AND n.name IS NOT NULL ORDER BY d.date DESC, i.date DESC, n.date DESC LIMIT 1
『条件』 ・update_log テーブルから、指定した id に該当するレコードのdate, ip, nameを取得する ・ただし、ip, name の各項は NULL 値が入っている可能性がある ・NULL 値ではない、もっとも date が大きいレコードを各項について取得する
上記クエリだと、取得にかなり時間がかかってしまうため、 よりよいクエリを発行したいのですが、よいアイディアが生まれません。 助言いただけましたらうれしいです。 0440NAME IS NULL2009/07/03(金) 13:04:22ID:??? nとhが混ざってね?
それは置いといて、クエリよりインデックスの張り方の問題じゃないかな。 それぞれのテーブルに複合インデックスを張れば 普通に激速になりそうな気がする。 0441NAME IS NULL2009/07/03(金) 13:13:46ID:??? いや、よく見るとクエリも変? LEFT JOINいらなくね? 違うか? 0442NAME IS NULL2009/07/03(金) 13:26:49ID:??? それ自己結合する意味あんの? 条件の1つ目と3つ目なんて違う話だし 0443NAME IS NULL2009/07/03(金) 15:08:14ID:??? レスありがとうございます。
>>440 すみません、一個所 n が h になっていました。 インデックスは EXPLAIN 見ながら貼り直したりしてみたのですが、 特に変化はみられませんでした。
>>441 >>442 それぞれの値を取得するために、 3つばらばらにシンプルなクエリを発行したほうが良いということでしょうか? 0444NAME IS NULL2009/07/03(金) 15:41:51ID:??? すみません、そもそもクエリが条件に合致していませんでした。
SELECT d.date, i.ip, n.name FROM update_log d LEFT JOIN update_log i ON (i.id = d.id) LEFT JOIN update_log n ON (n.id = d.id) WHERE d.id = 100 AND i.ip IS NOT NULL AND n.name IS NOT NULL ORDER BY d.date DESC, i.date DESC, n.date DESC LIMIT 1 0445NAME IS NULL2009/07/03(金) 19:52:22ID:??? サブクエリ使ってください
select l1.date, l1.ip, l1.name from update_log l1 where id = <入力値> and date = ( select max(l2.date) from update_log l2 where l1.id = l2.id and l2.ip is not null and l2.name is not null ) 0446NAME IS NULL2009/07/03(金) 21:14:10ID:???>>445 それだと全フィールドがnullのレコードが選択されるんじゃね 0447NAME IS NULL2009/07/04(土) 00:15:52ID:??? アドバイスありがとうございます。
いろいろ試した結果UNIONでつなげることで落ち着きました。
はじめのクエリだとなぜだめなのかが、よくわかりません。 500行のテーブルに対して10秒近くかかってしまっていました。 クエリのどこに原因があるのか、おわかりになる方いましたら、 ぜひ教えてください。m(_ _)m 0448NAME IS NULL2009/07/07(火) 17:41:36ID:??? 二つのDATETIME型の差をTIMEDIFF関数を使って求めたのですが、838時間以上は丸められてしまいます。 正確な秒数を求める方法はありますか? 0449NAME IS NULL2009/07/08(水) 18:44:51ID:???>>448 time型ではそれ以上の時間は扱えない。 0450NAME IS NULL2009/07/17(金) 22:48:11ID:??? あるレコードを DELETE するのと あるレコードの主キーを UPDATE するコストっていうのはあまり変わらないですか? 0451NAME IS NULL2009/07/18(土) 00:19:49ID:??? 全然違う。 DELETEは重い。頻度にもよるけど、リアルタイムで叩くなら、最もやってはいけない事。 一方、主キーを書き換えるのもヘン。主キーは唯一のレコードを特定するのに用いるべきで、 途中で書き換えてよいデータでは基本的にない。 0452NAME IS NULL2009/07/18(土) 05:01:47ID:??? コストがかかるのはindexがある場合のそのメンテと、外部キーの参照先になっている 場合とかだろ。deleteそのものはinsertとそんなに違うわけじゃない。 ところで、コストが全然違うと言いたいのか、どっちもコストがかかると言いたいのか どっちなんだ。 0453NAME IS NULL2009/07/18(土) 12:41:08ID:??? 感じ悪いスレだな 0454NAME IS NULL2009/07/19(日) 00:31:12ID:??? 固定長のテーブルなら気にしない 0455NAME IS NULL2009/08/02(日) 10:47:35ID:??? うん ただupdateにくらべてdeleteが死ぬほどおもいのはたしか 0456NAME IS NULL2009/08/02(日) 11:39:00ID:??? MySQLの全文検索って日本語対応してますか? n-gram検索ですか?それとも分かち書きされたワード検索ですか? 0457NAME IS NULL2009/08/02(日) 15:30:56ID:??? 分かち書きされたワード検索。 日本語も分かち書きすれば一応使える…けど普通はSenna使う 0458NAME IS NULL2009/08/03(月) 21:38:34ID:??? そうなんですか。 ググったら、Sennaもワード検索と、あと2-gramをサポートということなんですね。 2-gramがあれば完全に自由な文字列でも検索できるのかな。 Debianではsennaのパッケージが見付からないのが残念です。 0459NAME IS NULL2009/08/03(月) 21:52:10ID:??? Windows XP SP3 MySQL 5.1 です、root のパスワードを忘れてしまいました Google でMysql パスワード 忘れたで検索しますが、的確なすべがわかりません ご教示願います。 0460NAME IS NULL2009/08/03(月) 23:22:30ID:??? 試してないが。これで駄目? http://miztools.so.land.to/php5_list/sql4_list/mysql_win.shtml0461NAME IS NULL2009/08/04(火) 21:23:23ID:???>>460 さん ありがとうございます。 掲示していただいたURL 「root パスワードを忘れたときの 伝家の宝刀:1」ここに書かれている mysqld-nt にパラメータを付加し起動する方法を、試すのですがWindows版MySQL 5.1 にmysqld-nt.exe が無いので お手上げになっている状況です。 0462NAME IS NULL2009/08/05(水) 04:38:46ID:???>>461 ちょっと考えれば分かるだろうけど、タスクマネージャで現在実行中のファイル名とか確認しましょうぜ。
何、インストール時にそんなバックアップなんか取ってないって? それなら本家行って、初期状態のをとってくればよろしい。 0463NAME IS NULL2009/08/05(水) 21:38:30ID:???>>462さん>>461 です どうもです、 >>それなら本家行って、初期状態のをとってくればよろしい。 本家ってhttp://www-jp.mysql.com/ ここのことだと思うのですが これって再インストールしろってことですか? 0464NAME IS NULL2009/08/06(木) 06:37:10ID:???http://dev.mysql.com/0465NAME IS NULL2009/08/14(金) 20:39:45ID:??? ちょっとした事、教えてください。 on duplicate key update で insertした時、insertした内、何件がinsertで、何件がupdateだったとかって 判りますかね?
そういうのが知りたい場合は on duplicate keyを使うべきではない?
0466NAME IS NULL2009/08/15(土) 22:23:31ID:JM2SHLWw MySQLの設定について教えて下さい。 BLOB型にVB.NETから格納しようとINSERT文を使っても MySQL側の制限のせいでbyte配列の0番目の(63)しか格納できません><
ご回答よろしくお願いします。
環境 Ubuntu9.04 MySQL 5.0 VB.NET(mysql.data.dll使用) 0467NAME IS NULL2009/08/16(日) 13:09:44ID:???>>466 質問になってないな… 0468NAME IS NULL2009/08/16(日) 15:06:45ID:???>>466 スキーマ、SQL文とか 制限があると判断した根拠がないとな。 0469NAME IS NULL2009/08/17(月) 14:44:57ID:??? 別ファイルにテーブル定義を作成してます(10テーブル)、そのファイルを MySQL に読み込ませて、新規テーブルを作成したいのですが、具具ってもコマンドが分かりません、教えてもらえないでしょうか。 0470NAME IS NULL2009/08/17(月) 21:49:18ID:???>>469 mysql dbname < filename 0471NAME IS NULL2009/08/22(土) 17:31:04ID:???>>470 >>469です お礼が遅くなりました、ありがとうございます。
0472NAME IS NULL2009/08/30(日) 21:09:54ID:??? mysqlの正規表現で文字列の部分抽出や置換はできないのでしょうか。 たとえば、下記のtema列値をタグを正規表現で除去して表示することは出来ますでしょうか? (どんなタグが入るか不明のため、正規表現で除去したいと思っています。) 低レベルな質問ですみませんが、お分かりになられる方が居られましたら ご教授よろしくお願いいたします。
sid | tema ---------- 1 | <b>その1</b> 2 | <I><b>その2</b></I> 3 | <b>その3</b> 0473NAME IS NULL2009/08/30(日) 23:34:29ID:??? regexp ? rlike ? よく判んね w 0474NAME IS NULL2009/08/30(日) 23:39:10ID:???>>472 mysqlじゃ無理。おとなしくプログラムで対処するしかない。 0475NAME IS NULL2009/09/02(水) 17:36:46ID:??? MacOS X Leopard から SnowLeopard への以降に伴い、 MySQLを5.0(x86)から5.1(x86_64)にアップグレードしました。 このとき、データベースファイルはそのままコピーできるものなのでしょうか。 それともmysqldumpとかを使った方がいいのでしょうか。 5.0から5.1への移行における、おすすめのデータファイル移行方法を教えてください。 よろしくお願いします。 0476NAME IS NULL2009/09/05(土) 21:21:30ID:??? CPU違うならdumpしなきゃだめよ。 dumpだけでいいかはしらん。 0477NAME IS NULL2009/09/05(土) 23:09:50ID:??? MySQL で 5時間前 や 5時間後 を算出するにはどうすれば良いでしょか? AddHour(2)とかって関数は無いのでしょか?
SELECT SYSDATE() + 5 / 24 FROM TEST_TABLE
としているのですが変な値が返って来ます。 0478NAME IS NULL2009/09/05(土) 23:55:52ID:???>>477 addtime 0479NAME IS NULL2009/09/05(土) 23:59:45ID:???>>478 サンクス 0480NAME IS NULL2009/09/23(水) 15:29:42ID:??? 急な停電のためmysqlのデータベースファイルが壊れてしまったのですが myisamなテーブルはrepairで復旧できたのですが innodbの場合はrepairしようとするとエラーが出てしまうのですが何か復旧方法ってありますでしょうか? 0481NAME IS NULL2009/09/23(水) 22:23:11ID:??? UPS使ってないシステムなんてしらん 0482NAME IS NULL2009/09/24(木) 02:58:26ID:??? とりあえず現状をバックアップしてさらに壊したときに対応できるようにする。 んで innodb_force_recovery を6に。 0483NAME IS NULL2009/10/21(水) 20:25:16ID:G/42etG5 すいません。ここじゃないかもしれませんが知ってたら教えてください。 mysql workbench5.1.16 OSX版を使用していますが、 カラムの型をdouble (16,9)とかにしてもただのdoubleになってしまいます。 なんなんですかいったい。DBデザイナーだとちゃんといくのに。設定で回避できたりしないでしょうか?? 0484NAME IS NULL2009/10/21(水) 23:05:05ID:nmNVAfvz MySQLでテーブルのカラムはいくつくらいまで作成しても大丈夫ですか? 50〜100個とか普通は作成しないでしょうか。 0485NAME IS NULL2009/10/21(水) 23:07:26ID:???>>484 ttp://nippondanji.blogspot.com/2009/05/mysql.html 0486NAME IS NULL2009/10/21(水) 23:45:02ID:nmNVAfvz>>485 回答有難うございます!
InnoDBの場合は1000カラムまでで、これは速度はほとんど低下しないと期待してもよいのでしょうか? 0487NAME IS NULL2009/10/22(木) 15:08:28ID:??? 1000カラムのうちLOBがいくつあるかによる LOBが増えれば増えるほど遅くなるよ 0488NAME IS NULL2009/10/22(木) 23:09:09ID:tsxw+rRJ>>487
画像みたいなのを入れなければいいんですね。想像以上に作成できるカラムの数が多くて驚いています。 有難うございました。 0489NAME IS NULL2009/10/23(金) 12:29:40ID:tEyJFZiS>>483 user define typeで個別に作ると対応できるみたい。不便。 0490NAME IS NULL2009/10/24(土) 05:14:42ID:??? 質問です。 Windows XP で 5.0.45 を使用して、毎日 mysqlimport コマンドをバッチ処理で実行していますが 昨日までは正常に動作していたのに、今日のジョブが5時間以上経っても終わりません。 show processlist で見てもプロセスは存在しません。 現在何が起きているのかを確認する方法はないでしょうか? 0491NAME IS NULL2009/10/24(土) 18:02:55ID:??? とりあえずエラーログをみる 04924902009/10/24(土) 20:53:52ID:???>>491 エラーログファイルは見てみましたが、何も吐いていませんでした。 半日経っても終わらないので kill しましたが、一件もロードされておらず テーブルロックが掛かっているような感じにも思えますが、テーブルを更新するのは そのバッチ処理のみなのでそれもないし・・・ kill した後に手動で mysqlimport コマンドを発行したら、あっという間に正常終了しました。 何だったのだろう・・・ よく分かりませんが、再現待ちとします。 ありがとうございました。 0493NAME IS NULL2009/12/03(木) 22:35:54ID:??? 素人丸出しの質問かもしれませんが、MySQLを使う必要が生じてしまったのでお願いします。
を確認してみるべし。 0506NAME IS NULL2010/04/14(水) 19:46:11ID:??? かねやんからエクスポート後、再度かねやんからインポートした時、 文字列が空欄になるんだけど、この現象って文字化けなの? 0507NAME IS NULL2010/04/14(水) 22:22:42ID:??? ファイアーウォールかもね 0508NAME IS NULL2010/08/14(土) 23:40:51ID:WQmEq40c age