元スレ【この先一体】MySQL 総合 Part15【どうなるの】
mysql覧 / PC版 /みんなの評価 : ○
901 = :
in句に相関のないサブクエリを書いちゃだめ
dataテーブルのレコード数だけlistテーブルのフルスキャンが走る
delete from data where not exists
(select 1 from list where list.id = data.id)
902 = :
>>901
ありがとうございます。
魔法のようなクエリですね。
903 = :
>>900
サブクエリを使わずに、
delete data from data left join list on data.id=list.id where list.id is null
という方法もある。
904 = :
http://slashdot.jp/comments.pl?sid=472169&threshold=-1&commentsort=3&mode=thread&pid=1660225#1660234
ライセンスについてなんか論議されている。
taka2って言うのが一人だけやたら斜め上からで変な持論展開
908 = :
私も文字コード迷った。
ajax使うのにらくだからと思ってサイトもDBも全部utf8にしちゃったけど、今後なにか不都合とかデメリットとかってあるでしょうか?
909 = :
>>908
入口から出口までutf8で通すのが一番楽だと思うけど、
古い携帯とかサポートしたいのかな?
911 = :
>>910
最近のブラウザや携帯電話では問題ないよ。
IE6とか、古い携帯電話だと機種によってはutf8が甘いのもあるけど、
とりあえずは無視しても良いと思う。
utf8は根強い反対派も居るけど、俺は歓迎してるよ。
(確かに問題も含んでいるのは確かだけど。)
全部utf8で統一すれば、変換テーブル問題もないし。
ただ、適所で正規化が必要かも。そこは面倒だね。
912 :
>>911
レスありがとうございます
「正規化が必要」とは、どういうことでしょうか?
913 = :
MySQL 5.1
auto_incrementに関する質問です。あれは番号を削除した場合つめる事が出来ないですよね。皆さん
どの様にされてます?独自の連番システムを作ってるとかですか?
現在作っているのはPKとしてのみ使い、それを使って検索するとか表示するとかする予定は無いのですけど。
914 = :
>>913
どのようにしているもなにも、番号をつめる必要を感じない
915 = :
>>914
まァそう言えばそうなんですが w
では、逆に(削除が有った時に)詰める必要があるとしたらどうすれば良いと思います?
916 = :
>>912
ひょっとして、正規化って概念すら知らんのか?
>>915
別のカラム作れ
917 = :
>>912
unicodeが嫌われる理由の一つが、その正規化なんですよね。
Macの「~」とか。
まぁ、調べてみてくれ。
918 :
>>916
レスありがとうございます。
「正規化」という言葉の意味ではなく、
「何」を正規化しなければいけないのか?
という質問です。
よろしくお願いします。
919 = :
>>918
何って、unicodeの話してるんじゃないのか?
922 = :
InnoDBで、多くのクライアントからupdateやselectが
たくさん(といっても10クエリ/秒)来ているとき、
ほとんどの場合で良好にさばいてくれるのですが、
あるとき、(たぶんupdate)処理がスタックして、
そのテーブルが絡むselect等も一斉に止まり、
timeoutして再び動き出すことがあります。
止まっている間、dead-lock が生じているわけでもなく
CPUやI/Oもidle状態で、なぜ止まっているのか分かりません。
試しにMyISAMにしてみると、そのロックはおきませんでした。
なので外部キー制約かと思って、InnoDBに戻して外部キー設定を外してみたのですが、
やはり同じようにロックが生じてしまいます。
ちょっとこれだけの情報で何を質問しているんだと怒られそうですが、
具体的に何がロックしているのかも分からないので、どうしたものかわかりません。
InnoDBに特有の有名な注意点があったりするのでしょうか。
抽象的な質問ですみません。
924 = :
ソ
926 = :
>>923
使う予定のアプリや文字が、全部sjis前提なら、何も問題ない。
でも、そんなことあるか?
930 = :
なんでそんなテーブルにしているの?
931 = 929 :
>>930
レスありがとうございます。
テーブルは他人が作ったもので、私が遊休時間の平均を算出するように頼まれました。
例えばどういうテーブルが良いでしょうか?
932 = :
テーブルきれいにしても、
プログラムでゴリゴリ書くしか思いつかんなあ
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 = :
>>931
素直に集計スクリプト書いたら?
934 = :
窓口テーブルが大きいと問題があるかもしれないけど。
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 = :
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) );
937 = :
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 = :
935-937
時間のテーブルを別に用意してやってみた。
・窓口の数
・人の滞在時間の重複
・平均算出の単位
・窓口の開始・終了時間
・処理単位は秒?分?
このあたりも考えないとダメだけど。
あと、構文はOracleです…。
ていうか質疑応答スレじゃないのに良かったのかな。
939 = :
>>938
神クエリを見ることが出来たので、許す。
940 = :
まさかSQLだけでやっちまえるとは…
941 :
リアルにすごいなこれ
942 = :
字下げが詰められちゃったSQLを3人も(!)読んでもらえたみたいでマジ感謝です。
行頭スペースを全角で置き換える気力がなかったの。ごめんね。
つーか、MySQLのスレでOracleSQL書いて褒められるってwww
質問者さんには伝わったかなぁ…あ、ホントに使うなら検証してね!
ノシ
943 = :
>>942
SQLの方言、ちょっと使わないと忘れるよな。
そういえば、sedやawkは忘れないのに、perlは使えなくなるのはなんでだぜ?
944 = :
非常に初心者的な質問ですみません
今までSQLite使っていました
SQLiteはファイルシステムにデータベースを生成する場合を使って、samples.sqliteというファイルを事前に作り、そこにに書き込んでいました
今MySQLを使っているのですが、MySQLはいったい何処の何にデータベースを書き込んでいるのでしょうか?
MySQLフォルダを見ても何か書き込みようのものが見当たるわけでもありませんし、パスはどこに指定されているのかとか良く分かりません
テーブルとかのデータはいったいどこに格納されているのでしょうか?
945 = :
C:\mysql\data\testdb とか
/var/lib/mysql/testdb とかの
testtbl.frm
testtbl.MYI
testtbl.MYD
など。
946 = :
ファイルベースじゃないと何か不安だなぁ
専用機なら良いんだろうけど
947 = :
>>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 = :
解決致しました
949 = :
なぜどう解決したか書かない。
950 = :
解決方法を他人に教えるのが勿体ない!みたいな心理が働いてるんじゃね
みんなの評価 : ○
類似してるかもしれないスレッド
- 【MySQL】下らねぇ質問はID出して書き込みやがれ 2 (985) - [21%] - 2012/10/17 7:16
- 【】 MySQLを買収したSunを買収したOracleを 【】 (112) - [19%] - 2023/1/22 14:15
トップメニューへ / →のくす牧場書庫について