のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,603,407人
昨日: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
    901 : NAME IS - 2009/10/28(水) 08:05:57 ID:??? (+36,-30,-52)
    in句に相関のないサブクエリを書いちゃだめ
    dataテーブルのレコード数だけlistテーブルのフルスキャンが走る

    delete from data where not exists
    (select 1 from list where list.id = data.id)
    902 : NAME IS - 2009/10/28(水) 09:38:52 ID:??? (+61,+29,-11)
    >>901
    ありがとうございます。
    魔法のようなクエリですね。
    903 : NAME IS - 2009/10/28(水) 23:04:24 ID:??? (+8,-30,-50)
    >>900
    サブクエリを使わずに、
    delete data from data left join list on data.id=list.id where list.id is null
    という方法もある。
    904 : NAME IS - 2009/10/29(木) 11:15:10 ID:??? (+3,-29,-32)
    http://slashdot.jp/comments.pl?sid=472169&threshold=-1&commentsort=3&mode=thread&pid=1660225#1660234
    ライセンスについてなんか論議されている。
    taka2って言うのが一人だけやたら斜め上からで変な持論展開
    905 : NAME IS - 2009/10/29(木) 11:25:31 ID:??? (+0,-29,-39)
    >>903
    ありがとうございます。
    手持ちの環境では効率に差がないようですが、
    サブクエリよりは、left join のほうが一般的におすすめでしょうか?
    908 : NAME IS - 2009/10/31(土) 10:23:52 ID:??? (+74,+28,-46)
    私も文字コード迷った。
    ajax使うのにらくだからと思ってサイトもDBも全部utf8にしちゃったけど、今後なにか不都合とかデメリットとかってあるでしょうか?
    909 : NAME IS - 2009/10/31(土) 13:32:02 ID:??? (+2,-1,-31)
    >>908
    入口から出口までutf8で通すのが一番楽だと思うけど、
    古い携帯とかサポートしたいのかな?
    911 : NAME IS - 2009/10/31(土) 16:07:59 ID:??? (+74,+29,-103)
    >>910
    最近のブラウザや携帯電話では問題ないよ。
    IE6とか、古い携帯電話だと機種によってはutf8が甘いのもあるけど、
    とりあえずは無視しても良いと思う。

    utf8は根強い反対派も居るけど、俺は歓迎してるよ。
    (確かに問題も含んでいるのは確かだけど。)
    全部utf8で統一すれば、変換テーブル問題もないし。
    ただ、適所で正規化が必要かも。そこは面倒だね。
    912 : 910 - 2009/11/02(月) 20:07:03 ID:cL+4Y1kF (+122,+29,-10)
    >>911
    レスありがとうございます

    「正規化が必要」とは、どういうことでしょうか?
    913 : NAME IS - 2009/11/02(月) 21:45:30 ID:??? (+37,-29,-45)
    MySQL 5.1
    auto_incrementに関する質問です。あれは番号を削除した場合つめる事が出来ないですよね。皆さん
    どの様にされてます?独自の連番システムを作ってるとかですか?

    現在作っているのはPKとしてのみ使い、それを使って検索するとか表示するとかする予定は無いのですけど。
    914 : NAME IS - 2009/11/02(月) 22:11:11 ID:??? (+96,+29,-5)
    >>913
    どのようにしているもなにも、番号をつめる必要を感じない
    915 : NAME IS - 2009/11/02(月) 22:49:21 ID:??? (+107,+29,-29)
    >>914
    まァそう言えばそうなんですが w

    では、逆に(削除が有った時に)詰める必要があるとしたらどうすれば良いと思います?
    916 : NAME IS - 2009/11/03(火) 00:26:04 ID:??? (+89,+29,-9)
    >>912
    ひょっとして、正規化って概念すら知らんのか?

    >>915
    別のカラム作れ
    917 : NAME IS - 2009/11/03(火) 01:56:54 ID:??? (+71,+29,-15)
    >>912
    unicodeが嫌われる理由の一つが、その正規化なんですよね。
    Macの「~」とか。
    まぁ、調べてみてくれ。
    918 : 912 - 2009/11/03(火) 07:55:58 ID:zLDyRTuE (+56,+29,-21)
    >>916
    レスありがとうございます。

    「正規化」という言葉の意味ではなく、
    「何」を正規化しなければいけないのか?
    という質問です。

    よろしくお願いします。
    919 : NAME IS - 2009/11/03(火) 09:07:23 ID:??? (+37,+1,-2)
    >>918
    何って、unicodeの話してるんじゃないのか?
    920 : NAME IS - 2009/11/03(火) 09:55:34 ID:??? (-1,-29,-33)
    NFKCで正規化したutf8でいれてutf8_binで比較してる。
    921 : NAME IS - 2009/11/03(火) 21:16:26 ID:??? (-1,-29,-22)
    正規化してないShiftJISを使うことなんて普通だし、Unicodeだからといって
    正規化必須ってわけじゃないからなぁ。
    922 : NAME IS - 2009/11/04(水) 04:35:48 ID:??? (+3,-29,-190)
    InnoDBで、多くのクライアントからupdateやselectが
    たくさん(といっても10クエリ/秒)来ているとき、
    ほとんどの場合で良好にさばいてくれるのですが、
    あるとき、(たぶんupdate)処理がスタックして、
    そのテーブルが絡むselect等も一斉に止まり、
    timeoutして再び動き出すことがあります。

    止まっている間、dead-lock が生じているわけでもなく
    CPUやI/Oもidle状態で、なぜ止まっているのか分かりません。

    試しにMyISAMにしてみると、そのロックはおきませんでした。
    なので外部キー制約かと思って、InnoDBに戻して外部キー設定を外してみたのですが、
    やはり同じようにロックが生じてしまいます。

    ちょっとこれだけの情報で何を質問しているんだと怒られそうですが、
    具体的に何がロックしているのかも分からないので、どうしたものかわかりません。
    InnoDBに特有の有名な注意点があったりするのでしょうか。

    抽象的な質問ですみません。
    924 : NAME IS - 2009/11/04(水) 10:14:16 ID:??? (+34,+16,+0)
    925 : NAME IS - 2009/11/04(水) 12:27:01 ID:??? (-24,-29,-3)
    SJISだと表示できない文字が増えてきたから
    926 : NAME IS - 2009/11/04(水) 14:36:44 ID:??? (+41,+19,-9)
    >>923
    使う予定のアプリや文字が、全部sjis前提なら、何も問題ない。
    でも、そんなことあるか?
    927 : NAME IS - 2009/11/04(水) 14:51:59 ID:??? (-1,-29,-24)
    最初から最後までSJISならいいけどね。
    途中Unicodeになると、変換再変換が面倒くさい。
    0x5c,0xa5みたいなのとか。
    929 : NAME IS - 2009/11/04(水) 22:21:36 ID:gnz0MBuh (+0,+0,+0)
    +----------+---------+-------+----+
    | 日時  | 人(id) |入・出 | 時間  |
    +----------+---------+-------+----+
    | 20061002 | 222627 | b | 13:26:47 |
    | 20061002 | 222627 | c | 13:36:14 |
    | 20061002 | 585717 | b | 13:36:41 |
    | 20061002 | 585717 | c | 13:37:26 |
    | 20061002 | 1142463 | b | 13:38:01 |
    | 20061002 | 1142463 | c | 13:40:50 |
    | 20061002 | 402399 | b | 13:40:58 |
    | 20061002 | 402399 | c | 13:44:24 |


    ↑は,銀行の窓口のテーブルです。
    bが人が入ってきた時間で,cが出ていった時間とします。

    そこで,人が窓口にいない遊休時間の平均を算出したいのですが,
    どのようにしたらよいのでしょうか?
    MySQLは5.0です。
    930 : NAME IS - 2009/11/04(水) 23:54:54 ID:??? (+68,+27,-8)
    なんでそんなテーブルにしているの?
    931 : 929 - 2009/11/04(水) 23:58:22 ID:gnz0MBuh (+40,+29,-16)
    >>930
    レスありがとうございます。
    テーブルは他人が作ったもので、私が遊休時間の平均を算出するように頼まれました。

    例えばどういうテーブルが良いでしょうか?
    932 : NAME IS - 2009/11/05(木) 10:33:43 ID:??? (+3,-30,-239)
    テーブルきれいにしても、
    プログラムでゴリゴリ書くしか思いつかんなあ

    int number = 0;
    boolean idle = false;
    long begin = 0L;
    long end = 0L;

    rs = conn.executeQuery("select ... from ... order by 時間");

    while (rs.next()) {
     if (rs.getString(3).equals("b")) {
      number++;
     } else if (rs.getString(3).equals("c")) {
      number--;
     } else {
      throw ...
     }
     
     if (number == 0) {
      begin = rs.getTimestamp(4).getTime();
      idle = true;
     } else if (idle == true) {
      end = rs.getTimestamp(4).getTime();
      idleList.add(end - begin);
      idle = false;
     }
    }
    933 : NAME IS - 2009/11/05(木) 12:07:22 ID:??? (+8,-24,-17)
    >>931
    素直に集計スクリプト書いたら?
    934 : NAME IS - 2009/11/05(木) 13:16:28 ID:??? (+3,-30,-200)
    窓口テーブルが大きいと問題があるかもしれないけど。

    SELECT AVG(diff) FROM (
    SELECT IF(
    COUNT(IF(c2.入・出 = 'b', 1, NULL)) = COUNT(IF(c2.入・出 = 'c', 1, NULL)),
    TIME_TO_SEC(TIMEDIFF(c1.時間, MAX(c2.時間))),
    NULL
    ) AS diff
    FROM 窓口 c1, 窓口 c2
    WHERE c1.入・出 = 'b' AND c1.時間 > c2.時間
    GROUP BY c1.id
    ) diffs;
    935 : NAME IS - 2009/11/05(木) 13:38:27 ID:??? (+3,-30,-73)
    create table hoge(
    ent_date varchar2(8)
    ,guest_id varchar2(6)
    ,ent_type varchar2(1)
    ,ent_time date
    );

    create table time_table ( t_time varchar2(4) );
    936 : NAME IS - 2009/11/05(木) 13:41:04 ID:??? (+0,+0,+0)
    insert into time_table
    select str_h || m2.str_m2 || m1.str_m1 -- as t_time
    from (
    select str_h2 || str_h1 as str_h
    from
    ( select '0' as str_h2 from dual
    union all select '1' as str_h2 from dual
    union all select '2' as str_h2 from dual ) h2
    ,( select '0' as str_h1 from dual
    union all select '1' as str_h1 from dual
    union all select '2' as str_h1 from dual
    union all select '3' as str_h1 from dual
    union all select '4' as str_h1 from dual
    union all select '5' as str_h1 from dual
    union all select '6' as str_h1 from dual
    union all select '7' as str_h1 from dual
    union all select '8' as str_h1 from dual
    union all select '9' as str_h1 from dual ) h1
    where str_h2 || str_h1 between '00' and '23' ) hh
    ,( select '0' as str_m2 from dual
    union all select '1' as str_m2 from dual
    union all select '2' as str_m2 from dual
    union all select '3' as str_m2 from dual
    union all select '4' as str_m2 from dual
    union all select '5' as str_m2 from dual ) m2
    ,( select '0' as str_m1 from dual
    union all select '1' as str_m1 from dual
    union all select '2' as str_m1 from dual
    union all select '3' as str_m1 from dual
    union all select '4' as str_m1 from dual
    union all select '5' as str_m1 from dual
    union all select '6' as str_m1 from dual
    union all select '7' as str_m1 from dual
    union all select '8' as str_m1 from dual
    union all select '9' as str_m1 from dual ) m1
    -- order by t_time
    ;
    937 : NAME IS - 2009/11/05(木) 13:42:08 ID:??? (+3,-30,-143)
    select
    100 * ( 1 - sum(excl_flg) / count(*) )
    from (select
    tt.t_time
    ,u_io.excl_flg
    from time_table tt
    left join
    (select distinct
    1 as excl_flg
    ,i_time
    ,o_time
    from ( select guest_id ,to_char(ent_time ,'hh24mi') as i_time from hoge where ent_type = 'b' ) u_i
    left join ( select guest_id ,to_char(ent_time ,'hh24mi') as o_time from hoge where ent_type = 'c' ) u_o
    on u_i.guest_id = u_o.guest_id ) u_io
    on tt.t_time between i_time and o_time
    );
    938 : NAME IS - 2009/11/05(木) 13:48:24 ID:??? (+96,+29,-91)
    935-937

    時間のテーブルを別に用意してやってみた。

    ・窓口の数
    ・人の滞在時間の重複
    ・平均算出の単位
    ・窓口の開始・終了時間
    ・処理単位は秒?分?

    このあたりも考えないとダメだけど。
    あと、構文はOracleです…。

    ていうか質疑応答スレじゃないのに良かったのかな。
    939 : NAME IS - 2009/11/06(金) 09:54:48 ID:??? (+70,+29,-14)
    >>938
    神クエリを見ることが出来たので、許す。
    940 : NAME IS - 2009/11/06(金) 10:36:52 ID:??? (+52,+29,-5)
    まさかSQLだけでやっちまえるとは…
    941 : NAME IS - 2009/11/06(金) 11:11:52 ID:ZUvcKSUf (+18,+28,-1)
    リアルにすごいなこれ
    942 : NAME IS - 2009/11/06(金) 14:20:10 ID:??? (+91,+30,-84)
    字下げが詰められちゃったSQLを3人も(!)読んでもらえたみたいでマジ感謝です。
    行頭スペースを全角で置き換える気力がなかったの。ごめんね。

    つーか、MySQLのスレでOracleSQL書いて褒められるってwww
    質問者さんには伝わったかなぁ…あ、ホントに使うなら検証してね!

    ノシ
    943 : NAME IS - 2009/11/08(日) 15:54:38 ID:??? (+60,+19,-23)
    >>942
    SQLの方言、ちょっと使わないと忘れるよな。

    そういえば、sedやawkは忘れないのに、perlは使えなくなるのはなんでだぜ?
    944 : NAME IS - 2009/11/09(月) 13:48:24 ID:??? (+3,-29,-113)
    非常に初心者的な質問ですみません
    今までSQLite使っていました
    SQLiteはファイルシステムにデータベースを生成する場合を使って、samples.sqliteというファイルを事前に作り、そこにに書き込んでいました
    今MySQLを使っているのですが、MySQLはいったい何処の何にデータベースを書き込んでいるのでしょうか?
    MySQLフォルダを見ても何か書き込みようのものが見当たるわけでもありませんし、パスはどこに指定されているのかとか良く分かりません
    テーブルとかのデータはいったいどこに格納されているのでしょうか?
    945 : NAME IS - 2009/11/09(月) 14:05:02 ID:??? (+4,-30,-26)
    C:\mysql\data\testdb とか
    /var/lib/mysql/testdb とかの
    testtbl.frm
    testtbl.MYI
    testtbl.MYD
    など。
    946 : NAME IS - 2009/11/09(月) 14:21:34 ID:??? (+57,+29,-16)
    ファイルベースじゃないと何か不安だなぁ
    専用機なら良いんだろうけど
    947 : NAME IS - 2009/11/09(月) 14:24:16 ID:??? (+13,-30,-176)
    >>945
    すみません、色々再確認してみたのですが、どうもそのようなファイル、フォルダがbin、lib、shareしかなく、見当たりませんで、拡張子も.pdbというのがいくつかあるだけでした

    で、my.iniを確認してみたのですが、

    #Path to installation directory. All paths are usually resolved relative to this.
    basedir="C:/Program Files/MySQL/MySQL Server 5.1/"

    #Path to the database root
    datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/"

    というのが見つかったのですが、このどちらかのパスで指定された場所にあるのでしょうか?
    デフォルトのまま使っているのですが、Application Dataというフォルダが自分のには見当たらなくて、結局何処にあるのか分かりませんでしたが
    948 : 947 - 2009/11/09(月) 14:56:33 ID:??? (+22,-5,+0)
    解決致しました
    949 : NAME IS - 2009/11/09(月) 15:19:33 ID:??? (+52,+29,-2)
    なぜどう解決したか書かない。
    950 : NAME IS - 2009/11/09(月) 16:00:10 ID:??? (+57,+29,-11)
    解決方法を他人に教えるのが勿体ない!みたいな心理が働いてるんじゃね
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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