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

    私的良スレ書庫

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

    元スレMySQL 総合 Part12

    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
    201 : 198 - 2007/10/22(月) 23:00:11 ID:??? (-26,-29,-141)
    >>199
    ありがとうございます。
    現在レプリケーションの設定ですが、いろいろつまずいています。

    MyISAMの小さなデータベースで練習をしているのですが、
    この場合も「バイナリログ」を使った更新になるのでしょうか?
    MyISAM用の単純な方式(クエリのテキスト文をスレーブに投げる等)なものがあるのでしょうか?

    あと、レプリケーションのタイミングは、
    update、delete等、データベースが変わる瞬間にレプリケーションをするのでしょうか?
    タイマーのようなもので、一定間隔で変わるのでしょうか?
    204 : NAME IS - 2007/10/23(火) 10:50:38 ID:??? (+3,+18,-2)
    >>203
    indexはどーなってるん?
    206 : 203 - 2007/10/24(水) 01:59:09 ID:??? (-29,-27,-14)
    >>204-205
    そうです。indexを含めてleft joinをするとかなり重たいです。
    208 : NAME IS - 2007/10/25(木) 09:29:08 ID:??? (+27,+29,-49)
    半角カタカナ、全角半角英字、などみなさんはどのように対処されていますか?
    入力時に全部統一させる、清音化した列を新たに設ける、その都度関数を用いて変換比較する
    結構悩ましい問題だと思うのですが・・・
    209 : NAME IS - 2007/10/25(木) 10:32:04 ID:??? (-27,-29,-99)
    うちでは
    入力されたデータの中の
    半角カタカナは勝手に全角カタカナに変換
    全角英数字は勝手に半角英数字に変換
    するプログラムを経由してから
    SQL薄幸してます
    210 : NAME IS - 2007/10/25(木) 11:16:38 ID:??? (+17,+28,-1)
    >>209に幸多かれ
    212 : NAME IS - 2007/10/25(木) 19:23:28 ID:??? (-2,+9,+0)
    できる
    213 : NAME IS - 2007/10/25(木) 19:46:11 ID:??? (-29,-30,-135)
    http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_32 をみて、
    /etc/my.conf の [mysqld] のブロックに

    init-connect='SET AUTOCOMMIT=0'

    を追加しました。

    grant 文でスーパーユーザじゃないユーザをつくって mysql コマンドで接続したところ、
    Auto Commit が 0 になっていました。

    でもこれだとスーパーユーザが接続した場合は、Auto Commit = 1 のままですが、
    これはしょうがないのでしょうか?
    214 : NAME IS - 2007/10/25(木) 23:32:34 ID:??? (+14,+26,+1)
    しょうがない。
    215 : NAME IS - 2007/10/26(金) 00:05:42 ID:??? (-21,-30,-128)
    排他制御について質問させてください。

    以下のようなtable Aがあったとします。
    ----------------------------------
    id | data
    ----------------------------------
    1 | aaa
    2 | bbb
    3 | ccc

    この状態で、データをinsertする場合、
    以下のようにidのmax値を取得して、
    select max(id) from A;
    max値に+1をして、insertという流れになるとします。

    複数のプログラムがこのテーブルにデータをinsertする可能性がある場合、
    テーブル毎ロックする必要があるでしょうか?

    #auto incrementはコーディング規約で使わない方針となっています(T_T
    223 : NAME IS - 2007/10/27(土) 15:34:28 ID:??? (-28,-29,-5)
    Linuxでも動くでしょMySQLAdmin
    224 : NAME IS - 2007/10/27(土) 16:36:17 ID:??? (+31,+29,-3)
    そうなんですか? よく調べてみます
    ありがとう
    225 : NAME IS - 2007/10/27(土) 17:14:47 ID:??? (+33,+29,-39)
    >>224
    Windows版にくっついてるGUIのやつかなあ?
    >>223と想像してるものとはちがうのかもしらん。
    どっちにしても大していいツールでもないので、ほかのを使うか自分でSQLを打つかすることになるだろう。
    226 : NAME IS - 2007/10/27(土) 19:36:17 ID:??? (-17,-30,+0)
    質問させて下さい。
    WindowsXP SP2 にてMySQL 5.0.43をメモリ2G搭載して使っています。
    1:my.cnf の設定を変更し再起動をかけたのですが一部設定通りに反映されていない部分がある。
    2:設定値についての疑問

    1については 下記以下一部抜粋 のように設定してあります。
    skip-locking
    key_buffer=1024M
    table_cache=1024
    max_allowed_packet=4M
    sort_buffer_size=2M
    read_buffer_size=4M

    SHOW VARIABLES; を打つと、table_cache 763 と表示され、設定した1024ではありません。
    また、SET GLOBAL table_cache=数値; を実行するときちんと設定値になります。
    設定ファイル通り読み込ませたいのです。

    2については設定値の~Mや~Kはわかるのですが、単位のついていないもの、例えばtable_cache等はバイトと考えればよいのでしょうか?
    だとすればグローバルキャッシュなのにもかかわらずあまりに使用メモリ量が少ないんじゃないかと思っています。

    最後に、現在メモリを多く使用するよう設定してMySQLの挙動テストをしているのですが、どれだけメモリを大きく設定しても
    key_buffer以外の設定だとメモリ利用料が5Mもあがりません。
    SHOW VARIABLES;では殆どの値がきちんと設定値になっていますが、本当にメモリを使用しているのか少々不安です。

    また、設定値自体の項目についてはいろいろなサイトで見かけますが、設定についてもう一歩踏み込んだ、
    挙動を想像・把握できるような解説がなされているサイト等はありませんでしょうか?
    MySQLドキュメント当を見ながらやってきたのですが行き詰ってしまいました。
    よろしくお願いします。
    227 : NAME IS - 2007/10/27(土) 20:09:59 ID:??? (-29,-30,-194)
    1.
    table_cache=700
    と書くとどうなる?
    OSレベルの制限値を見てmysqldが勝手に値を絞っているのかもしれない。

    2.
    table_cacheはハンドラというテーブルを管理する内部構造の「数」を示す。
    サーバへの同時接続数が100あって、それらが平均的に
    テーブル3つにアクセスするSQLを実行するなら、table_cacheは300以上にする。

    sort_buffer、read_bufferは
    それが必要となるようなSQLを実行しないと確保されない。

    > 設定についてもう一歩踏み込んだ、
    > 挙動を想像・把握できるような解説がなされているサイト

    英語を苦にしないならこのへん。
    http://forge.mysql.com/wiki/MySQL_Internals

    書籍ならこのへん。バージョン3.xや4.xの本を買わないように注意!
    ・現場で使える MySQL
    ・MySQL 辞典

    残念ながら、最終的にはソース嫁としか言えない。
    229 : NAME IS - 2007/10/28(日) 14:09:32 ID:??? (+14,+29,-91)
    UTF8のテーブルを使って文書を(主に)LIKE検索するプログラムを作っています。
    ひらがなとカタカナを吸収してもらえるので重宝している反面、
    一方のみの結果だけでじゅうぶん、ということも多いです。
    例えば人名で「アリス」と入力したとき、「~ありすぎて」までヒットしてしまうから・・
    これをSQL文など外部から制御する方法はあるでしょうか?
    MySQLは4.1です。
    230 : NAME IS - 2007/10/28(日) 16:43:09 ID:??? (-27,-30,-50)
    MySQL5で

    id = PK
    name = UNIQUE

    というカラムのある果物テーブルがあるとして

    REPLACE INTO 果物 SET name = りんご
    を一回やると

    id 1 name りんご

    というレコードができるのですが、

    REPLACE INTO 果物 SET name = りんご
    もう一度やると

    id 2 name りんご

    とういうレコードができます。
    これを、

    id 1 name りんご

    にするにはどうしたらいいですか?
    231 : NAME IS - 2007/10/28(日) 16:50:37 ID:??? (-26,-29,-52)
    REPLACE は INSERT とほぼ同じように動作しますが、唯一異なる点として
    UNIQUE インデックスまたは PRIMARY KEY に関して新しいレコードと同じ値が
    テーブル内の以前のレコードに含まれていると、以前のレコードが削除されてから
    新しいレコードが挿入されます。
    232 : NAME IS - 2007/10/28(日) 23:44:39 ID:??? (+22,+29,+0)
    そもそも何を期待してるのかが不明
    233 : NAME IS - 2007/10/29(月) 03:36:28 ID:??? (-29,-30,-177)
    教えてください。
    テーブルにPK1、PK2、PK3という3つのPKと4つ目のフィールドFLD4があり、
    PK1、PK3、FLD4の3つで構成されたインデックスIDX1があります。

    select
     PK1, Max(FLD4)
    From hoge
    Where PK3='hogehoge'
    Group By PK1

    というSQLをexplainで調査すると
    Using where; Using index; Using temporary; Using filesort
    が現れます。

    このテーブルには2000万件のレコードがあるのですが、
    Using temporary; Using filesortが現れるのはレコード数のせいでしょうか?
    235 : NAME IS - 2007/10/29(月) 15:16:08 ID:??? (+35,+26,-19)
    >>229
    分かち書きした検索用カラムを作って likeすれば。
    または、セナれば。
    236 : 0 - 2007/10/30(火) 02:21:14 ID:??? (+11,+18,+2)
    ありがとうございます。
    238 : NAME IS - 2007/10/30(火) 08:00:56 ID:??? (-26,-30,-151)
    デフォルトはNULLになるけど?

    mysql> create table test (c1 int primary key, c2 int);
    Query OK, 0 rows affected (0.04 sec)

    mysql> insert into test(c1) values (1);
    Query OK, 1 row affected (0.01 sec)

    mysql> select * from test;
    +----+------+
    | c1 | c2 |
    +----+------+
    | 1 | NULL |
    +----+------+
    1 row in set (0.00 sec)
    239 : NAME IS - 2007/10/30(火) 09:31:17 ID:??? (-10,-5,-5)
    >>238
    本当ですね・・・。
    いつもphpMyAdminで作成していたので、出来ないと思ってました。

    アドバイスありがとうございました。
    240 : 237 - 2007/10/30(火) 09:45:19 ID:??? (-27,-30,-72)
    すみません、もう一つ自己レスです。
    phpMyAdminはPHPなわけですが、その他のPHPのプログラムでも

    mysql> insert into test(c1,c2) values (1,'');

    では駄目なんですね。空であっても''があると、
    そのフィールドには0が入ってしまうみたいです。
    243 : 229 - 2007/10/30(火) 20:08:04 ID:??? (+42,+29,-83)
    >>235
    遅レスすみません。
    分かち書きは考えてみたのですが、そうすると複合語にマッチしづらくなりませんか?
    ユーザー入力も同じ仕組みで分かち書きすればいいのかもしれないんですが
    文書中、わりと崩した日本語も多いことから難しそうです。
    Sennaや標準のFULLTEXTは使える環境になくて・・・
    SET文などでスイッチできそうな気もするんですがどうも情報見つかりません。
    244 : NAME IS - 2007/10/30(火) 22:18:54 ID:??? (+33,+29,-27)
    >>243
    切り替えはCOLLATEで可能なんだけど、あなたの望むようなモノが用意されてるかは調べてません。
    まあこのへんを読んでちょ。
    http://dev.mysql.com/doc/refman/5.1/ja/charset-mysql.html
    http://dev.mysql.com/doc/refman/5.1/ja/charset-collate.html
    245 : NAME IS - 2007/10/31(水) 11:02:22 ID:??? (+31,+29,-96)
    >>229
    フルテキストは分かち書きして保存する。
    入力文字ももちろん分かち書きする。
    で、入力文字を分かち書きした区切り分クエリする。
    そのとき前後の区切りも検索の対象にするのがポイント。
    だけど決してパフォーマンスは出ないのでデータ数によっては注意しる。
    247 : 229 - 2007/10/31(水) 13:15:29 ID:??? (-19,-30,-304)
    >>245-246
    ありがとうございます。
    テーブルのcollationはutf8_unicode_ciにしています。

    COLLATEはまったく知らなかったので、昨夜>>245を見て確認してみました。
    テーブル作成時にutf8_unicode_ciを指定したことをあまり意識していなくて
    >>229に書かなかったのがよくなかったですm(_ _)m
    utf8_unicode_ciのテーブルに対するSELECT文にCOLLATEを入れることで、
    ひらがな、カタカナが分けて検索されるのを確認できました。
    SELECT * FROM table_name
    WHERE column_name COLLATE utf8_general_ci
    LIKE '%foo%' ORDER BY ・・・(続く)

    検索フォームでオプションとして切り替えたりすれば便利だなと
    喜んでいたんですが、その後の挙動がちょっとおかしいみたいで・・・
    次の検索でCOLLATE~を指定しない検索をした場合でも
    utf8_unicode_ciの検索に戻らないみたいだったんです。
    テーブルのステータスを確認しても、ちゃんとutf8_unicode_ciなんですが・・

    多分、上記の挙動はなにか別の理由というか勘違いっぽい気もしてるので
    今夜さらに確認してからお返事をと思っていたんですが
    >>246でちょうど指摘をいただいたので取り急ぎ書き込みました。
    たいへん参考になりますm(_ _)m
    248 : 229 - 2007/10/31(水) 20:55:14 ID:??? (+30,+29,-75)
    先ほど確認できました。
    >>247のSQL文で問題なくスイッチできました。

    動作がうまくいかなかった部分については、やはり別の理由からで
    検索を試した何パターンかの自作スクリプトのうちのひとつに原因があったものでした。
    そのときは突っ込まずにすぐ寝てしまったので・・すみません。

    いただいた回答、たいへん参考になりました。ありがとうございましたm(_ _)m
    249 : NAME IS - 2007/11/01(木) 00:20:39 ID:??? (-19,-29,-20)
    limit句についてご質問があります。

    あるテーブルにn件のデータがあるとして、
    limit 3,n
    のようなことをしたいのですが、どのようにすればよろしいでしょうか?
    limitでなくても構わないのですが、、よろしくお願い致します。

    250 : NAME IS - 2007/11/01(木) 01:40:04 ID:??? (-26,-29,-48)
    >>249
    先頭3行を読み飛ばして続くn行を表示って意味かな。
    だとしたら正しくはlimit n,3(LIMIT n OFFSET 3)で
    3行とばして最後までだとlimit -1,3かと。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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