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

    私的良スレ書庫

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

    元スレMySQL 総合 Part14

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 1 + - mysqldump + - rXBUq5sa + - share + - utf8_bin + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    451 : NAME IS - 2008/09/17(水) 21:33:59 ID:??? (-12,-10,-8)
    その用途でDBはオーバースペックなんじゃね?
    452 : NAME IS - 2008/09/17(水) 21:45:58 ID:??? (+21,+21,-34)
    なんでもかんでもRDBMS使おうとすんなよ。
    sennaの結果をキーにしてレス番引くハッシュDB+共有メモリだ、この野郎。
    453 : NAME IS - 2008/09/17(水) 22:16:43 ID:??? (-29,-29,-4)
    sennna使うって、専鯖じゃないと無理では?
    455 : NAME IS - 2008/09/18(木) 08:06:13 ID:??? (-28,-30,-234)
    > update文やdelete文を実行する際に、
    > whereで該当した行だけがロックがかかるのでしょうか?

    NO
    そのSQLを実行するために「InnoDBが触った行がすべて」ロックされる。
    索引の効かないSQL、例えば
    UPDATE AAA SET BBB = CCC WHERE DDD LIKE '%ABC%';
    こんなのを実行すると全行ロックされる。

    > 他のセッションからselectやupdateが実行された場合、
    > whereに該当するデータを対象としている場合は、ロックにより待たされるけど、
    > whereに該当するデータではない場合には、そのまま待たされずに実行されるということでしょうか?

    MVCCだからそもそもSELECTは待たされない。

    前述した仕組みにより
    UPDATEは他の更新SQLのWHERE句と重なっていなくても待たされることがある。
    456 : 0 - 2008/09/18(木) 13:11:40 ID:??? (+35,+29,-105)
    皆様、たくさんのご意見ありがとうございますm(_ _)m

    >>444さん
    datのみということでしょうか?
    ファイルをごちゃごちゃいじるのが苦手なのでレス編集・レス削除・レス検索の実装を考えるとどうもうまくいく絵が想像できないでいます…
    ちょっとdatのみの場合の設計も考えてみます。

    >>445さん
    datとDBにする場合はDBを検索専用に考えてます。
    なのでdatのみだと検索が大変そうなのでレスデータをDBにいれておけば検索も簡単にできるかも と思いました。

    >>452さん
    貴重なご意見ありがとうございます。
    無知すぎてどういう意味か理解できません。調べます。

    >>453さん
    ハウジングです。
    458 : NAME IS - 2008/09/18(木) 15:29:32 ID:??? (+10,+28,-24)
    >>457
    テーブルの構造は「固定」なの?
    固定なら新しいテーブルを作成する時に、
    予め作成しておいたSQLファイルを実行すればいいと思う。

    459 : NAME IS - 2008/09/18(木) 16:15:36 ID:aEJbx1ek (-23,+29,-19)
    >>455 さん詳しくありがとうございます。
    分かりやすい説明でよく分かりました。
    indexが効くようなSQLを考えたいと思います。
    助かりました。
    460 : 457 - 2008/09/18(木) 22:27:14 ID:cULg/wVA (-15,+29,-16)
    テーブル構造はそのままです。
    同じDB内ならテーブル名を変更すればいいだけだけど
    そんな感じで名前そのままでDBだけ変更できないかなって思って
    463 : NAME IS - 2008/09/19(金) 04:16:28 ID:??? (+20,+24,-5)
    >>460
    それって単に新規テーブル作成するだけじゃないのか?
    464 : 457 - 2008/09/19(金) 12:38:01 ID:iYQHTpJc (+29,+29,-43)
    とりあえずmysqldumpは分かったんですが
    このコマンドってどうやって使うんですか?

    mysql >
    って書き方じゃないからPHPのクエリ送る関数では無理ですよね?

    となるとプロンプト画面からだけなんですか?
    めんどくさい…。
    465 : NAME IS - 2008/09/19(金) 14:04:39 ID:??? (-21,-29,-22)
    LOAD DATA INFILEやINTO OUTFILEに日本語のファイル名が使えないのですが、
    これは仕様なのでしょうか。
    466 : 465 - 2008/09/19(金) 15:16:39 ID:??? (+8,+15,+0)
    自己解決しました。
    467 : NAME IS - 2008/09/19(金) 21:27:59 ID:??? (+12,+16,-4)
    コンソールもまともに使えないバカはDB使うな
    471 : NAME IS - 2008/09/20(土) 02:03:44 ID:??? (-18,-30,-85)
    > 「chcp 65001」でUTF-8

    これ、自分もいつかどこかで聞いたことあるけど、UTF-8にならなかった。(XPsp2 and sp3)
    そん時MSのKBとかでも探してみたんだけど、結局ようわからんかった。

    つうことで>>469
    chcp 437 とかで、ISO-8859-1(Latin1)とかにすることは可能。
    どうしてもUTF-8のまま扱いたかったら、コマンドから、>(リダイレクト)で出力を
    ファイルに書き出せばいいんでない。
    472 : 471 - 2008/09/20(土) 02:34:24 ID:??? (+28,+28,-106)
    失礼。>>471書き込んでからもっかいググってみたら、
    どうやらコマンドでchcp65001入れるだけでなくて、
    プロパティから「フォント設定」も変更しないといけないらしい。

    つうことでやってみたら、コマンドプロンプトがUTF-8にナッタヨ!でも一部の文字が化ける。
    (しかも一度画面を切り替えるなりして、Window再描画したら直るし。意味分からん)

    とゆうこで471は忘れて下さい。あんまやるとスレ違いにもなっちゃうので。
    スレ汚し失礼しました。
    477 : NAME IS - 2008/09/21(日) 06:18:52 ID:??? (-3,-1,-9)
    PHP 知らないけど、プレースホルダ使えないの?
    479 : NAME IS - 2008/09/21(日) 16:13:33 ID:??? (-27,-30,-158)
    ・クエリキャッシュの有無
    ・SQLの複雑さ
    ・バッファキャッシュへのヒット率
    ・ネットワーク経由かどうか

    といった要因で性能は1~2桁変わるから、
    人の聞いても意味ないよ。

    意味ないことを示すために手元のノートPC(Core2Duo 2.0GHz)で
    8735.9 query/s 出してみた。
    480 : NAME IS - 2008/09/21(日) 16:14:45 ID:??? (-27,-30,+0)
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class BenchTest {
    public static void main(String[] args) {
    try {
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/scott", "root", "xxxx");
    Statement stmt = conn.createStatement();

    long time = System.currentTimeMillis();
    for (int i = 0; i < 100000; i++) {
    doTrans(stmt);
    }
    time = System.currentTimeMillis() - time;
    System.out.println(time / 1000.0);

    stmt.close();
    conn.close();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }

    static void doTrans(Statement stmt) throws SQLException {
    ResultSet rs = stmt.executeQuery("select 1");
    while (rs.next()) {
    //
    }
    rs.close();
    }
    }

    これで11.447秒
    481 : NAME IS - 2008/09/21(日) 16:54:04 ID:??? (-27,-30,-63)
    テーブルhogeのaとbというフィールドに複合インデックス作って以下のようなクエリを
    実行しているのですが、インデックスを使用してくれません。

    select * from hoge where (a, b) in ((1,2), (3,4), (5,6), ... );

    インデックスを使用して効率的に上記のような文を実行させる方法はありますか?
    483 : NAME IS - 2008/09/21(日) 22:10:51 ID:??? (+17,+27,-13)
    ふつうはトリガ使うんじゃないの
    484 : NAME IS - 2008/09/22(月) 12:02:25 ID:??? (-21,-30,-101)
    http://www.century21macao.jp/jp/property-for-investment/villa-de-mor/tower1.html?gclid=CL3-sKu07pUCFQ5aegodaDQ7eA

    このページ見ると、
    Warning: mysql_result() [function.mysql-result]:
    Unable to jump to row 0 on MySQL result index 6
    in /home/century/public_html/mainpages.php on line 42

    こんなエラーばっかしなんだけど、
    どうしてかな?
    485 : NAME IS - 2008/09/22(月) 12:37:15 ID:??? (-9,-30,-85)
    データをUTF-8で入れているのですが、すべてのデータをujis(euc-jp)に変えることは可能でしょうか?
    今、考えつく方法はmysqldumpしてエディタで文字コードを変えていれるくらいです
    コマンドでできる等ありましたらご教示お願いします
    486 : NAME IS - 2008/09/22(月) 13:31:25 ID:??? (-29,-29,-18)
    euc-jp で表現できない文字は、どうするの
    487 : NAME IS - 2008/09/22(月) 14:26:35 ID:??? (+24,+29,-9)
    >>484
    データ消しちゃってて、0件の時どうするか書いてないんじゃないのw
    488 : 482 - 2008/09/22(月) 14:36:02 ID:??? (-24,-29,-186)
    >>483
    レスありがとうございます。
    トリガですか。ひとつのテーブルに一個しかDefualtでCURRENT_TIMESAMP入れられないの地味に面倒ですね。
    せっかくトランザクションがあるのに・・・

    登録日時はデフォを0にして、ホスト言語でやるか、トリガ導入するか検討してみます。


    すいません。もう一点。
    実はポスグレからの移行なのですが、文字列を入れるカラムをポスグレのときは、
    長さを考えずに全部TEXTにしていたのですが、MySQLだと、
    TEXTにするとインデックス作るのに長さを指定しなきゃならないみたいなので
    最大文字数を想定できるところはVARCHAR(L)でやろうかと持ってます。

    ただ、慣れないので色々迷ってまして、
    この数字って、255以下の時と256以上の時で最低の容量が違うだけで、
    実は10とか100にするのと255にするのはあまり変わらなかったりするのでしょうか?

    なるべく、小さめに設定した方がいいにか、
    それこそ、ざっくり255 or 65535でやっちゃって良いのか、
    はたまた、いっそのこと全部TEXTでやっちゃうのか。インデックス作るのに長さ指定するのはそんなに面倒じゃないし。


    先輩方よろしくお願いいたします。

    489 : NAME IS - 2008/09/22(月) 14:39:32 ID:dQ0vwUgz (+20,+25,+0)
    今はじめて、>>1のAAが絵に見えた。
    490 : 482 - 2008/09/22(月) 15:51:02 ID:??? (-27,-30,-66)
    VARCHARとTEXTの違いを整理・共通点すると

    ○両方とも可変長である

    ○単位
    VARCHAR
    文字単位(マルチバイト文字は2文字にカウント。文字コードにより変わる)
    TEXT バイト単位(文字コードにより変わる)

    ○容量
    VARCHAR 
    491 : 482 - 2008/09/22(月) 15:59:43 ID:??? (-27,-30,-235)
    うぎゃ、なんかよくわらんが、スペースおしたら書き込んだ、すんません。


    VARCHARとTEXTの違いを整理・共通点すると(ちなみに5.0.45です)

    ○両方とも可変長である

    ○単位
    VARCHAR
     文字単位(マルチバイト文字は2文字にカウント。文字コードにより変わる)
    TEXT
     バイト単位(文字コードにより変わる)

    ○容量
    VARCHAR
     0~255文字までなら+1バイト、それ以上は+2バイト
    TEXT
     TINY、MEDIUMなど、最大容量によって+1~+4バイト

    ○インデックス
    VARCHAR
     プリフィックス長を指定して、部分インデックスを作ることも出来る
    TEXT
     必ずプリフィックス長を指定する。


    こんな感じでしょうか?
    プリフィックス長を指定したインデックスの挙動をいまいち理解してないのですが
    UNIQUEなどには出来ないってことですよね?
    主キーやUNIQUEならVARCHARで、それ以外はINDEXはって検索にバリバリ使うなら
    、少しVARCHARオススメで、あとはそれほど変わらないって事でしょうか?
    494 : 485 - 2008/09/22(月) 19:47:05 ID:??? (+5,+11,-20)
    >>486
    表現できない文字も強制的に変換してしまいたいです。文字化けすると思いますが
    495 : NAME IS - 2008/09/24(水) 00:25:05 ID:??? (-27,-30,+0)
    Debian (Linux)上にmysql 5.0.32-7 をインストールしています。
    mysqlの設定ファイル my.cnf に
    [client]
    default-character-set=utf8

    [mysqld]
    default-character-set=utf8
    skip-character-set-client-handshake
    を追記し、新規にデータベースを作成したりテーブルを作成した場合は文字化けしないのですが
    WindowsXPにインストールしたmysqlのデータを
    mysqldump -u root -p[rootのパスワード] [DB名] > db.sql
    等とエクスポートしたファイルをLinuxのシェルで
    mysql -u root -p[rootのパスワード] [DB名] < db.sql
    すると show full columns from [テーブル名] 等とすると
    [レコード名] | varchar(30) | sjis_japanese_ci
    と表示され、utf8になってない事が分かります。コレをutf8にすれば文字化けしないはずなのですが
    (新規に作成したテーブルだとutf8になっていますので) どうすれば変更できますか?
    alter table [テーブル名] default character set=utf8
    を実行してコマンドは成功したみたいなのですが、実際に確認してみても変わりません。
    alter table [テーブル名] default character set=utf8;
    Query OK, 10 rows affected (0.01 sec)
    Records: 10 Duplicates: 0 Warnings: 0
    ↑成功しているように見えるのに変化しません・・・。どうすればいいんでしょうか?
    499 : NAME IS - 2008/09/25(木) 14:19:02 ID:??? (+16,-30,-103)
    レプリケーションで2つの同期するテーブル構成を少し変えたいのですが可能でしょうか?
    以下のような構成にしてDB2(スレーブ)はselect専用にしたいです。
    update,insertはDB1(マスター)で更新というかたちです。

    DB1
    -------------------------
    seq title body body2 date

    primary key seq
    -------------------------

    DB2
    -------------------------
    seq title body body2 date

    primary key seq,
    index title,
    fulltext body,body2
    -------------------------
    500 : NAME IS - 2008/09/26(金) 06:11:12 ID:JNwKxv59 (+25,+29,-154)

    レプリケーションでマスターとスレーブの同期をとるためのコマンドLOAD DATA FROM MASTER
    があったけど、今使えないっつうか、廃止予定らしい。

    レプリケーションで新しくスレーブ足してマスタースレーブのデータの同期を取るのはどうすりゃいいの?
    一旦マスターとめてデータのバックアップをスレーブでリストしないとだめ?

    それともマスター動かしたまま、とりあえずバックアップとってスレーブでリストア、
    あとはレプリケーションうごかすと、バイナリログでそのうちマスターとスレーブが同期する?

    難しくてわかんないよぉ

    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 1 + - mysqldump + - rXBUq5sa + - share + - utf8_bin + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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