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

私的良スレ書庫

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

元スレMySQL 総合 Part18

mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : - megab + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
651 : NAME IS - 2010/11/09(火) 02:19:15 ID:XUvSW9tK (+21,+29,-28)
>>637
同意。
バイナリをDBに格納するなんて基地外。
コネクション長時間握られてあっという間に飽和するぞ。
転送時間を考えるべし。
654 : 653 - 2010/11/09(火) 16:02:30 ID:??? (+16,+27,-9)
ごめん リストアって書いてあったね
リストアはどうやったの?
658 : NAME IS - 2010/11/09(火) 17:39:50 ID:??? (-29,-30,-51)
Bug #25162: Backing up DB from 5.1 adds 'USING BTREE' to KEYs on table creates
http://bugs.mysql.com/bug.php?id=25162
ということらしい
バージョンを合わせるか、「mysqldump --compatible=mysql40 ...」という手もあるようだ
660 : 619 - 2010/11/09(火) 18:14:37 ID:??? (-29,-29,-15)
>>651
みなさんありがとうございましたm(_ _)m
素人なんで勉強になりました。
C案で決定でやることにします。
661 : NAME IS - 2010/11/10(水) 21:59:45 ID:??? (-6,-29,-61)
質問です。
NOW()やUNIX_TIMESTAMP()は、
FOR UPDATE等のロックで待たされた場合、
SELECTを仕掛けた瞬間と、待ちが終わってSELECTが実行できたときと
どちらの時間を返しますか?
662 : NAME IS - 2010/11/10(水) 22:34:49 ID:??? (+33,+29,-8)
どっちか知りたいなら試してみりゃいい。
ただし、決まっているとは限らんけどな。
663 : 661 - 2010/11/10(水) 22:42:16 ID:??? (+32,+29,-10)
>>662
おっしゃるとおり。時間ができたら試してみます。
べ、別に誰か既に試したなら教えてくれてもいいんだからねっ!
664 : 661 - 2010/11/11(木) 02:14:24 ID:??? (+27,+29,-10)
試してみた。結果、待ちが終わった時間を取得。

まぁ、ロックされてる情報にしたって最新のを取得してくれるんだから
時間もそうなるよなぁ。
665 : NAME IS - 2010/11/11(木) 06:23:58 ID:??? (-8,-30,+0)
phpを用いて、 mysqlで構築したDBからデータを取得し、ページ上に表示させようと考えています。
しかし、同じようにDBに接続し、クエリを発行しているのに取得結果が異なります。
対象のデータはchar型の文字列で、一方のページでは「TEST」となるのに対し、もう一方のページでは「"TEST"」となってしまいます。
接続には後述のような記述を用いていますが、SELECT文のみ異なります。
前者はSELECT * FROM test WHERE以下略
後者はSELECT aaa,bbb FROM test WHERE以下略
何故このような違いが出るのでしょうか?自分としてはクォーテーションが含まれない方が好ましいのですが、どうすれば良いでしょうか?
上記に関し、mysqlスレならわかるかもとphpスレより誘導されてきました。
何かわかる方が居られましたらご教示頂ければと思います。
参考までに、phpでDB接続・クエリ発行のソースを記しておきます。


$db = mysql_connect("localhost", "アカウント", "パスワード") or die("接続できませんでした\n");
mysql_query("SET NAMES utf8") or die("SET NAMES utf8 の設定ができません");
mysql_select_db("データベース名", $db) or die("該当するデータベースがないようです\n");
$query = "SELECT カラム FROM テーブル名 WHERE no = '$no'";
$result = mysql_query($query, $db);
$row = mysql_fetch_row($result);
666 : NAME IS - 2010/11/11(木) 16:33:54 ID:??? (+20,+29,-2)
肝心の出力処理の部分を書きなさい
667 : 665 - 2010/11/11(木) 22:15:43 ID:??? (-26,-30,-46)
>666
失礼しました。
両者とも$row[0]や$row[1]です。
前者は
echo $row[0];
後者は
print <<< HTML
<h2>$row[0]</h2>
HTML;
このあたりの違いはありますが・・・
668 : NAME IS - 2010/11/12(金) 07:25:05 ID:??? (+0,-30,+0)
データベースの容量が大きくなってしまったので、
ローカルで1行ずつ容量の削減をする作業をしています。
容量は700MB、レコード数は約20万です。

$i = file_get_contents('count.php');
$j = 0;
while(1){
$r = db_query('SELECT id,description FROM entry ORDER BY id LIMIT '.$j.',1'); //mysqli関数を使った独自関数です
if($r === FALSE){ die(); }
db_query('INSERT INTO entry SET decription = "'.mb_substr($r[0]['description'],0,200,'UTF-8').'" WHERE id = "'.$r[0]['id'].'"');
$i++;
file_put_contents('count.php',$i);
$j++;
if($j==1000){break;} //ここの数字を変えて1度に処理する量を変える
}
db_query('OPTIMIZE TABLE entry');

テーブルの容量が減れば減るほど、UPDATEやOPTIMIZEは早く終わるのではと思い、
1000行ずつやってみているのですが、1回に数分かかり、200回もやらなくてはいけません。
10000行やると1回に十数分かかり、だいたい15MBくらいの削減になるようです。

そこで質問なのですが、どれくらいずつやるのが良いと思いますか?
よろしくお願い致します。
671 : NAME IS - 2010/11/12(金) 09:31:33 ID:??? (-27,-30,-66)
あとプログラムで1行ずつやるよりは、こうしたほうが速いと思う。

CREATE TABLE temp AS SELECT id, SUBSTR(description, 0, 200) FROM entry;
DROP TABLE entry;
RENAME TABLE temp TO entry;
677 : NAME IS - 2010/11/12(金) 15:23:10 ID:??? (+17,+29,-65)
>>676
クエリはすべて成功したと考えてよい。

ちなみにこれも老婆心だとは思うけど
UPDATEは更新対象が0行でも正常終了するから気をつけて。
678 : NAME IS - 2010/11/12(金) 15:53:03 ID:CCE9XiI6 (+7,+22,-1)
>>647
どなたか教えていただけると嬉しいです><
679 : NAME IS - 2010/11/12(金) 16:11:18 ID:??? (-16,-4,-24)
>>647
難しいなぁ。
サブクエリ側で同じkey内のランダムな行をなんとかして
EXISTSでなんとかしてできそうな気がしたけどやっぱわからん。
680 : NAME IS - 2010/11/12(金) 16:18:21 ID:??? (+24,+29,-146)
>>647,6
ORDER BY rand()を利用すればできるかもしれないけど、全件走査になるだろうしな。
件数が少ないならプログラム側でなんとかなるだろうし、件数が極端に多くなったらIDを
乱数で発生させて適度に抜き出したほうがいいだろうし。

乱数ソートはインデックスが効かないんだから、SQLでなんとかするよりもプログラム側で
なんとかするほうがいいでないかの。
681 : NAME IS - 2010/11/12(金) 16:47:20 ID:??? (+19,+29,-39)
>>647
解決法は分からないんだけど・・・
差し支えなければ、どういう用途で使用するのか教えてくれる?
682 : 665 - 2010/11/12(金) 16:53:46 ID:??? (-29,-29,+0)
>665,>667です。
どなたかわかりませんでしょうか?(´・ω・`)
683 : NAME IS - 2010/11/12(金) 17:02:04 ID:??? (+24,+29,-45)
>>682
とりあえず両者とも、クエリ発行直後の時点でechoなりログ吐くなりしてみたら?
そこの時点で同じなら、その後の処理になにかあるんだろう。
685 : NAME IS - 2010/11/13(土) 21:15:04 ID:CaiJLbhU (+63,+29,-275)
最近データベースに画像を保存できると知りました。それで、テーブルの扱いについて質問です。

例えば同じサービスに日記と料理レシピの紹介機能があってそれぞれ写真をUPできるとき、
1)写真データは専用の写真テーブルに入れるべきでしょうか?
2)それとも日記テーブルとレシピテーブルに写真用カラムを作って入れるべきですか?

1)の場合、登録時も引き出し時にトランザクションの負荷が発生するし、
2)の場合、ユーザごとの合計アップロード容量を算出する時手間です

どうしたら良いでしょうか
合計容量の算出なんて各ユーザの管理画面でしか不要だから2)が正解でしょうか
それとも第3・第4のテーブルを使って効率的に実装する方法があるんでしょうか

どういう風に作るとどんな面で利点がある、という形で意見貰えると嬉しいです
初心者過ぎてDB設計の留意点などわからないので漠然とした質問になってすみません
よろしくお願いします
686 : NAME IS - 2010/11/13(土) 23:39:16 ID:??? (+31,+29,-36)
ユーザの立場を想像して言うと、一枚の写真を日記とレシピの両方に
使いたい場合もあるだろうなぁ、とか思うんだな。
687 : NAME IS - 2010/11/13(土) 23:57:55 ID:??? (+45,+29,-56)
>>685
>1)の場合、登録時も引き出し時にトランザクションの負荷が発生するし、
ここがわからん
別テーブルにすると更新も読み出しも負荷が高くなるって意味?

個人的には画像は無理にDBに入れんでも
ファイルでいいんジャマイカと思うが
688 : 685 - 2010/11/14(日) 08:51:54 ID:OQDjesf5 (+38,+29,-161)
>>686
ありがとうございます。確かにそうですね~!
「日記の記入と一緒に画像UP」の他に「既存の画像アーカイブから選んで日記に貼りつけ」の
機能も必要ですね

>>687
あ、引き出し時はトランザクションいらないですね
でもjoinが発生するんでしょうか
>別テーブルにすると更新も読み出しも負荷が高くなるって意味?
はい、トランザクションとかjoinとか、そういうものが少しでも発生しないように
作った方が良いのかなと思いまして…

画像を普通にファイルとして保存する場合、利用ファイル容量の計算難しくないですか?
(PHP使ってるんですが… 任意のディレクトリ以下のファイル容量を
再帰的に取得できる関数があるのかな~)
DBに画像登録なら、ファイルサイズも保存出来るからSUMで一発解決かなーと思いました
689 : NAME IS - 2010/11/14(日) 09:33:09 ID:??? (+26,+26,-8)
画像自体はファイルで、そのデータだけDBいれときゃいいようなー
690 : NAME IS - 2010/11/14(日) 11:13:39 ID:??? (+30,+30,-25)
>トランザクションとかjoinとか、そういうものが少しでも発生しないように


なんで瑣末な事をやたらと気にするのかね
691 : NAME IS - 2010/11/14(日) 11:40:59 ID:??? (+41,+29,-51)
>>687
少しでも負荷を軽くしたいのならファイルで扱ったほうがいいと思うけどな。そもそも画像データ
そのものは検索対象にならないんだし。

>画像を普通にファイルとして保存する場合、利用ファイル容量の計算難しくないですか?
ファイル名と一緒にサイズも登録しておけばいいだけじゃないの。
692 : 685 - 2010/11/14(日) 12:14:08 ID:OQDjesf5 (+44,+29,-72)
>>689
なんか初耳です。データだけってのはどういうことですか?
ファイル容量のデータ(100kbとか)のこと?

>>690
大した負荷じゃないんですかね?
トランザクションもjoinも最近おぼえたので「なんか大層なことをしてしまってる」ような
気がしてるんですが。

>>691
>ファイル名と一緒にサイズも登録
これは689さんの言ってることと一緒でしょうか? そういうことですよね?
容量計算用のテーブルにファイルサイズを入れる、と。なるほど…
693 : NAME IS - 2010/11/14(日) 13:39:31 ID:??? (+43,+30,-185)
>>692
>トランザクションもjoinも最近おぼえたので「なんか大層なことをしてしまってる」ような
>気がしてるんですが。

そりゃやらない場合よりはオーバーヘッドはあるよ。
ただ、それらをなるべく使わないようになんてのは、RDBを使う旨みをなるべく捨てようと
してるようなもんだわな。
まあとことん高負荷なサービス運営しようと言うところなら、一部その旨みを捨ててでも
システムへの負荷を下げるという技を使ってるかもしれないけど、こんなとこでこんなの
聞いてる人が作るものなら、先々は分らんが当面はそういう話は関係無いでしょ。
まずは実装の細かいとこでの効率なんかより、素直な設計のちゃんと動くものを作り
上げることを考えた方がよろし。

>データだけってのはどういうことですか?

画像データは普通のバラのファイルとして格納しといて、
そのファイルの情報(パス名とか)だけDBに入れておくってことだと思う。
694 : 685 - 2010/11/14(日) 14:14:27 ID:OQDjesf5 (+33,+29,+0)
>>693
あーなるほど、わかりました! ありがとうございました
695 : NAME IS - 2010/11/15(月) 10:36:42 ID:s7bzgzBD (+29,+29,-110)
画像はシステム的に破綻をきたしやすいよ。
DBにいれると例えばWeb側から画像表示となった場合、
(ローカルサーバにDBない前提だが)
ネットワーク越しにMySQLのポートを長時間つかむことになる。
ローカルでも同じことだけどね。
データ量がテキストの比じゃないからね。
俺も昔管理のしやすさを期待してそうしたけど大変なことになった。
696 : NAME IS - 2010/11/15(月) 12:57:23 ID:??? (+0,+2,-21)
DBに入れて初回アクセス時に適当なディレクトリにコピーを作っておいて、二回目以降はそちらを参照。
一定時間が過ぎたらディレクトリから削除。
毎回DBから取得はキツいでしょ
699 : NAME IS - 2010/11/15(月) 15:58:17 ID:??? (+27,+29,-5)
デカいデータを取り出すのが遅いとかそういう話してるんじゃないのか
データURIスキーム使ってもそこは一緒じゃん
700 : NAME IS - 2010/11/15(月) 18:12:39 ID:??? (-27,-30,-115)
2つの開発環境でdescのdiffを取っていて気づいたのですが、
片方ではあるビューのDEFAULT欄に元テーブルのカラムのDEFAULT値が
表示されるのですが、もう片方ではNULLとなります。
他にも片方で0000-00-00 00:00:00、もう一方でNULLになる箇所などがあります。

ビューのDEFAULTの欄なので、実質的な違いはないのですが、
これって仕様なんでしょうか?
それともバージョン違いのせい?(5.0.22と5.0.45)

できれば両方とも同じ表示になるようにしたいのですが、
ビュー再作成ではダメでした…
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : - megab + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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