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

みんなの評価 : ○
レスフィルター : (試験中)
in句に相関のないサブクエリを書いちゃだめ
dataテーブルのレコード数だけlistテーブルのフルスキャンが走る
delete from data where not exists
(select 1 from list where list.id = data.id)
dataテーブルのレコード数だけlistテーブルのフルスキャンが走る
delete from data where not exists
(select 1 from list where list.id = data.id)
>>900
サブクエリを使わずに、
delete data from data left join list on data.id=list.id where list.id is null
という方法もある。
サブクエリを使わずに、
delete data from data left join list on data.id=list.id where list.id is null
という方法もある。
http://slashdot.jp/comments.pl?sid=472169&threshold=-1&commentsort=3&mode=thread&pid=1660225#1660234
ライセンスについてなんか論議されている。
taka2って言うのが一人だけやたら斜め上からで変な持論展開
ライセンスについてなんか論議されている。
taka2って言うのが一人だけやたら斜め上からで変な持論展開
私も文字コード迷った。
ajax使うのにらくだからと思ってサイトもDBも全部utf8にしちゃったけど、今後なにか不都合とかデメリットとかってあるでしょうか?
ajax使うのにらくだからと思ってサイトもDBも全部utf8にしちゃったけど、今後なにか不都合とかデメリットとかってあるでしょうか?
>>910
最近のブラウザや携帯電話では問題ないよ。
IE6とか、古い携帯電話だと機種によってはutf8が甘いのもあるけど、
とりあえずは無視しても良いと思う。
utf8は根強い反対派も居るけど、俺は歓迎してるよ。
(確かに問題も含んでいるのは確かだけど。)
全部utf8で統一すれば、変換テーブル問題もないし。
ただ、適所で正規化が必要かも。そこは面倒だね。
最近のブラウザや携帯電話では問題ないよ。
IE6とか、古い携帯電話だと機種によってはutf8が甘いのもあるけど、
とりあえずは無視しても良いと思う。
utf8は根強い反対派も居るけど、俺は歓迎してるよ。
(確かに問題も含んでいるのは確かだけど。)
全部utf8で統一すれば、変換テーブル問題もないし。
ただ、適所で正規化が必要かも。そこは面倒だね。
MySQL 5.1
auto_incrementに関する質問です。あれは番号を削除した場合つめる事が出来ないですよね。皆さん
どの様にされてます?独自の連番システムを作ってるとかですか?
現在作っているのはPKとしてのみ使い、それを使って検索するとか表示するとかする予定は無いのですけど。
auto_incrementに関する質問です。あれは番号を削除した場合つめる事が出来ないですよね。皆さん
どの様にされてます?独自の連番システムを作ってるとかですか?
現在作っているのはPKとしてのみ使い、それを使って検索するとか表示するとかする予定は無いのですけど。
>>913
どのようにしているもなにも、番号をつめる必要を感じない
どのようにしているもなにも、番号をつめる必要を感じない
>>918
何って、unicodeの話してるんじゃないのか?
何って、unicodeの話してるんじゃないのか?
正規化してないShiftJISを使うことなんて普通だし、Unicodeだからといって
正規化必須ってわけじゃないからなぁ。
正規化必須ってわけじゃないからなぁ。
InnoDBで、多くのクライアントからupdateやselectが
たくさん(といっても10クエリ/秒)来ているとき、
ほとんどの場合で良好にさばいてくれるのですが、
あるとき、(たぶんupdate)処理がスタックして、
そのテーブルが絡むselect等も一斉に止まり、
timeoutして再び動き出すことがあります。
止まっている間、dead-lock が生じているわけでもなく
CPUやI/Oもidle状態で、なぜ止まっているのか分かりません。
試しにMyISAMにしてみると、そのロックはおきませんでした。
なので外部キー制約かと思って、InnoDBに戻して外部キー設定を外してみたのですが、
やはり同じようにロックが生じてしまいます。
ちょっとこれだけの情報で何を質問しているんだと怒られそうですが、
具体的に何がロックしているのかも分からないので、どうしたものかわかりません。
InnoDBに特有の有名な注意点があったりするのでしょうか。
抽象的な質問ですみません。
たくさん(といっても10クエリ/秒)来ているとき、
ほとんどの場合で良好にさばいてくれるのですが、
あるとき、(たぶんupdate)処理がスタックして、
そのテーブルが絡むselect等も一斉に止まり、
timeoutして再び動き出すことがあります。
止まっている間、dead-lock が生じているわけでもなく
CPUやI/Oもidle状態で、なぜ止まっているのか分かりません。
試しにMyISAMにしてみると、そのロックはおきませんでした。
なので外部キー制約かと思って、InnoDBに戻して外部キー設定を外してみたのですが、
やはり同じようにロックが生じてしまいます。
ちょっとこれだけの情報で何を質問しているんだと怒られそうですが、
具体的に何がロックしているのかも分からないので、どうしたものかわかりません。
InnoDBに特有の有名な注意点があったりするのでしょうか。
抽象的な質問ですみません。
最初から最後までSJISならいいけどね。
途中Unicodeになると、変換再変換が面倒くさい。
0x5c,0xa5みたいなのとか。
途中Unicodeになると、変換再変換が面倒くさい。
0x5c,0xa5みたいなのとか。
+----------+---------+-------+----+
| 日時 | 人(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です。
| 日時 | 人(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です。
テーブルきれいにしても、
プログラムでゴリゴリ書くしか思いつかんなあ
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;
}
}
プログラムでゴリゴリ書くしか思いつかんなあ
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;
}
}
窓口テーブルが大きいと問題があるかもしれないけど。
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;
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;
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) );
ent_date varchar2(8)
,guest_id varchar2(6)
,ent_type varchar2(1)
,ent_time date
);
create table time_table ( t_time varchar2(4) );
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
;
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
;
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
);
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
);
935-937
時間のテーブルを別に用意してやってみた。
・窓口の数
・人の滞在時間の重複
・平均算出の単位
・窓口の開始・終了時間
・処理単位は秒?分?
このあたりも考えないとダメだけど。
あと、構文はOracleです…。
ていうか質疑応答スレじゃないのに良かったのかな。
時間のテーブルを別に用意してやってみた。
・窓口の数
・人の滞在時間の重複
・平均算出の単位
・窓口の開始・終了時間
・処理単位は秒?分?
このあたりも考えないとダメだけど。
あと、構文はOracleです…。
ていうか質疑応答スレじゃないのに良かったのかな。
>>938
神クエリを見ることが出来たので、許す。
神クエリを見ることが出来たので、許す。
字下げが詰められちゃったSQLを3人も(!)読んでもらえたみたいでマジ感謝です。
行頭スペースを全角で置き換える気力がなかったの。ごめんね。
つーか、MySQLのスレでOracleSQL書いて褒められるってwww
質問者さんには伝わったかなぁ…あ、ホントに使うなら検証してね!
ノシ
行頭スペースを全角で置き換える気力がなかったの。ごめんね。
つーか、MySQLのスレでOracleSQL書いて褒められるってwww
質問者さんには伝わったかなぁ…あ、ホントに使うなら検証してね!
ノシ
非常に初心者的な質問ですみません
今までSQLite使っていました
SQLiteはファイルシステムにデータベースを生成する場合を使って、samples.sqliteというファイルを事前に作り、そこにに書き込んでいました
今MySQLを使っているのですが、MySQLはいったい何処の何にデータベースを書き込んでいるのでしょうか?
MySQLフォルダを見ても何か書き込みようのものが見当たるわけでもありませんし、パスはどこに指定されているのかとか良く分かりません
テーブルとかのデータはいったいどこに格納されているのでしょうか?
今までSQLite使っていました
SQLiteはファイルシステムにデータベースを生成する場合を使って、samples.sqliteというファイルを事前に作り、そこにに書き込んでいました
今MySQLを使っているのですが、MySQLはいったい何処の何にデータベースを書き込んでいるのでしょうか?
MySQLフォルダを見ても何か書き込みようのものが見当たるわけでもありませんし、パスはどこに指定されているのかとか良く分かりません
テーブルとかのデータはいったいどこに格納されているのでしょうか?
C:\mysql\data\testdb とか
/var/lib/mysql/testdb とかの
testtbl.frm
testtbl.MYI
testtbl.MYD
など。
/var/lib/mysql/testdb とかの
testtbl.frm
testtbl.MYI
testtbl.MYD
など。
>>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というフォルダが自分のには見当たらなくて、結局何処にあるのか分かりませんでしたが
すみません、色々再確認してみたのですが、どうもそのようなファイル、フォルダが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というフォルダが自分のには見当たらなくて、結局何処にあるのか分かりませんでしたが
解決致しました



類似してるかもしれないスレッド
- 【MySQL】下らねぇ質問はID出して書き込みやがれ 2 (985) - [21%] - 2012/10/17 7:16
- 【】 MySQLを買収したSunを買収したOracleを 【】 (112) - [19%] - 2023/1/22 14:15
トップメニューへ / →のくす牧場書庫について