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

みんなの評価 :
レスフィルター : (試験中)
ごめん リストアって書いてあったね
リストアはどうやったの?
リストアはどうやったの?
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 ...」という手もあるようだ
http://bugs.mysql.com/bug.php?id=25162
ということらしい
バージョンを合わせるか、「mysqldump --compatible=mysql40 ...」という手もあるようだ
質問です。
NOW()やUNIX_TIMESTAMP()は、
FOR UPDATE等のロックで待たされた場合、
SELECTを仕掛けた瞬間と、待ちが終わってSELECTが実行できたときと
どちらの時間を返しますか?
NOW()やUNIX_TIMESTAMP()は、
FOR UPDATE等のロックで待たされた場合、
SELECTを仕掛けた瞬間と、待ちが終わってSELECTが実行できたときと
どちらの時間を返しますか?
試してみた。結果、待ちが終わった時間を取得。
まぁ、ロックされてる情報にしたって最新のを取得してくれるんだから
時間もそうなるよなぁ。
まぁ、ロックされてる情報にしたって最新のを取得してくれるんだから
時間もそうなるよなぁ。
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);
しかし、同じように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
失礼しました。
両者とも$row[0]や$row[1]です。
前者は
echo $row[0];
後者は
print <<< HTML
<h2>$row[0]</h2>
HTML;
このあたりの違いはありますが・・・
失礼しました。
両者とも$row[0]や$row[1]です。
前者は
echo $row[0];
後者は
print <<< HTML
<h2>$row[0]</h2>
HTML;
このあたりの違いはありますが・・・
データベースの容量が大きくなってしまったので、
ローカルで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くらいの削減になるようです。
そこで質問なのですが、どれくらいずつやるのが良いと思いますか?
よろしくお願い致します。
ローカルで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くらいの削減になるようです。
そこで質問なのですが、どれくらいずつやるのが良いと思いますか?
よろしくお願い致します。
あとプログラムで1行ずつやるよりは、こうしたほうが速いと思う。
CREATE TABLE temp AS SELECT id, SUBSTR(description, 0, 200) FROM entry;
DROP TABLE entry;
RENAME TABLE temp TO entry;
CREATE TABLE temp AS SELECT id, SUBSTR(description, 0, 200) FROM entry;
DROP TABLE entry;
RENAME TABLE temp TO entry;
>>647,6
ORDER BY rand()を利用すればできるかもしれないけど、全件走査になるだろうしな。
件数が少ないならプログラム側でなんとかなるだろうし、件数が極端に多くなったらIDを
乱数で発生させて適度に抜き出したほうがいいだろうし。
乱数ソートはインデックスが効かないんだから、SQLでなんとかするよりもプログラム側で
なんとかするほうがいいでないかの。
ORDER BY rand()を利用すればできるかもしれないけど、全件走査になるだろうしな。
件数が少ないならプログラム側でなんとかなるだろうし、件数が極端に多くなったらIDを
乱数で発生させて適度に抜き出したほうがいいだろうし。
乱数ソートはインデックスが効かないんだから、SQLでなんとかするよりもプログラム側で
なんとかするほうがいいでないかの。
最近データベースに画像を保存できると知りました。それで、テーブルの扱いについて質問です。
例えば同じサービスに日記と料理レシピの紹介機能があってそれぞれ写真をUPできるとき、
1)写真データは専用の写真テーブルに入れるべきでしょうか?
2)それとも日記テーブルとレシピテーブルに写真用カラムを作って入れるべきですか?
1)の場合、登録時も引き出し時にトランザクションの負荷が発生するし、
2)の場合、ユーザごとの合計アップロード容量を算出する時手間です
どうしたら良いでしょうか
合計容量の算出なんて各ユーザの管理画面でしか不要だから2)が正解でしょうか
それとも第3・第4のテーブルを使って効率的に実装する方法があるんでしょうか
どういう風に作るとどんな面で利点がある、という形で意見貰えると嬉しいです
初心者過ぎてDB設計の留意点などわからないので漠然とした質問になってすみません
よろしくお願いします
例えば同じサービスに日記と料理レシピの紹介機能があってそれぞれ写真をUPできるとき、
1)写真データは専用の写真テーブルに入れるべきでしょうか?
2)それとも日記テーブルとレシピテーブルに写真用カラムを作って入れるべきですか?
1)の場合、登録時も引き出し時にトランザクションの負荷が発生するし、
2)の場合、ユーザごとの合計アップロード容量を算出する時手間です
どうしたら良いでしょうか
合計容量の算出なんて各ユーザの管理画面でしか不要だから2)が正解でしょうか
それとも第3・第4のテーブルを使って効率的に実装する方法があるんでしょうか
どういう風に作るとどんな面で利点がある、という形で意見貰えると嬉しいです
初心者過ぎてDB設計の留意点などわからないので漠然とした質問になってすみません
よろしくお願いします
ユーザの立場を想像して言うと、一枚の写真を日記とレシピの両方に
使いたい場合もあるだろうなぁ、とか思うんだな。
使いたい場合もあるだろうなぁ、とか思うんだな。
>>686
ありがとうございます。確かにそうですね~!
「日記の記入と一緒に画像UP」の他に「既存の画像アーカイブから選んで日記に貼りつけ」の
機能も必要ですね
>>687
あ、引き出し時はトランザクションいらないですね
でもjoinが発生するんでしょうか
>別テーブルにすると更新も読み出しも負荷が高くなるって意味?
はい、トランザクションとかjoinとか、そういうものが少しでも発生しないように
作った方が良いのかなと思いまして…
画像を普通にファイルとして保存する場合、利用ファイル容量の計算難しくないですか?
(PHP使ってるんですが… 任意のディレクトリ以下のファイル容量を
再帰的に取得できる関数があるのかな~)
DBに画像登録なら、ファイルサイズも保存出来るからSUMで一発解決かなーと思いました
ありがとうございます。確かにそうですね~!
「日記の記入と一緒に画像UP」の他に「既存の画像アーカイブから選んで日記に貼りつけ」の
機能も必要ですね
>>687
あ、引き出し時はトランザクションいらないですね
でもjoinが発生するんでしょうか
>別テーブルにすると更新も読み出しも負荷が高くなるって意味?
はい、トランザクションとかjoinとか、そういうものが少しでも発生しないように
作った方が良いのかなと思いまして…
画像を普通にファイルとして保存する場合、利用ファイル容量の計算難しくないですか?
(PHP使ってるんですが… 任意のディレクトリ以下のファイル容量を
再帰的に取得できる関数があるのかな~)
DBに画像登録なら、ファイルサイズも保存出来るからSUMで一発解決かなーと思いました
>トランザクションとかjoinとか、そういうものが少しでも発生しないように
なんで瑣末な事をやたらと気にするのかね
なんで瑣末な事をやたらと気にするのかね
>>687
少しでも負荷を軽くしたいのならファイルで扱ったほうがいいと思うけどな。そもそも画像データ
そのものは検索対象にならないんだし。
>画像を普通にファイルとして保存する場合、利用ファイル容量の計算難しくないですか?
ファイル名と一緒にサイズも登録しておけばいいだけじゃないの。
少しでも負荷を軽くしたいのならファイルで扱ったほうがいいと思うけどな。そもそも画像データ
そのものは検索対象にならないんだし。
>画像を普通にファイルとして保存する場合、利用ファイル容量の計算難しくないですか?
ファイル名と一緒にサイズも登録しておけばいいだけじゃないの。
>>692
>トランザクションもjoinも最近おぼえたので「なんか大層なことをしてしまってる」ような
>気がしてるんですが。
そりゃやらない場合よりはオーバーヘッドはあるよ。
ただ、それらをなるべく使わないようになんてのは、RDBを使う旨みをなるべく捨てようと
してるようなもんだわな。
まあとことん高負荷なサービス運営しようと言うところなら、一部その旨みを捨ててでも
システムへの負荷を下げるという技を使ってるかもしれないけど、こんなとこでこんなの
聞いてる人が作るものなら、先々は分らんが当面はそういう話は関係無いでしょ。
まずは実装の細かいとこでの効率なんかより、素直な設計のちゃんと動くものを作り
上げることを考えた方がよろし。
>データだけってのはどういうことですか?
画像データは普通のバラのファイルとして格納しといて、
そのファイルの情報(パス名とか)だけDBに入れておくってことだと思う。
>トランザクションもjoinも最近おぼえたので「なんか大層なことをしてしまってる」ような
>気がしてるんですが。
そりゃやらない場合よりはオーバーヘッドはあるよ。
ただ、それらをなるべく使わないようになんてのは、RDBを使う旨みをなるべく捨てようと
してるようなもんだわな。
まあとことん高負荷なサービス運営しようと言うところなら、一部その旨みを捨ててでも
システムへの負荷を下げるという技を使ってるかもしれないけど、こんなとこでこんなの
聞いてる人が作るものなら、先々は分らんが当面はそういう話は関係無いでしょ。
まずは実装の細かいとこでの効率なんかより、素直な設計のちゃんと動くものを作り
上げることを考えた方がよろし。
>データだけってのはどういうことですか?
画像データは普通のバラのファイルとして格納しといて、
そのファイルの情報(パス名とか)だけDBに入れておくってことだと思う。
画像はシステム的に破綻をきたしやすいよ。
DBにいれると例えばWeb側から画像表示となった場合、
(ローカルサーバにDBない前提だが)
ネットワーク越しにMySQLのポートを長時間つかむことになる。
ローカルでも同じことだけどね。
データ量がテキストの比じゃないからね。
俺も昔管理のしやすさを期待してそうしたけど大変なことになった。
DBにいれると例えばWeb側から画像表示となった場合、
(ローカルサーバにDBない前提だが)
ネットワーク越しにMySQLのポートを長時間つかむことになる。
ローカルでも同じことだけどね。
データ量がテキストの比じゃないからね。
俺も昔管理のしやすさを期待してそうしたけど大変なことになった。
DBに入れて初回アクセス時に適当なディレクトリにコピーを作っておいて、二回目以降はそちらを参照。
一定時間が過ぎたらディレクトリから削除。
毎回DBから取得はキツいでしょ
一定時間が過ぎたらディレクトリから削除。
毎回DBから取得はキツいでしょ
デカいデータを取り出すのが遅いとかそういう話してるんじゃないのか
データURIスキーム使ってもそこは一緒じゃん
データURIスキーム使ってもそこは一緒じゃん
2つの開発環境でdescのdiffを取っていて気づいたのですが、
片方ではあるビューのDEFAULT欄に元テーブルのカラムのDEFAULT値が
表示されるのですが、もう片方ではNULLとなります。
他にも片方で0000-00-00 00:00:00、もう一方でNULLになる箇所などがあります。
ビューのDEFAULTの欄なので、実質的な違いはないのですが、
これって仕様なんでしょうか?
それともバージョン違いのせい?(5.0.22と5.0.45)
できれば両方とも同じ表示になるようにしたいのですが、
ビュー再作成ではダメでした…
片方ではあるビューのDEFAULT欄に元テーブルのカラムのDEFAULT値が
表示されるのですが、もう片方ではNULLとなります。
他にも片方で0000-00-00 00:00:00、もう一方でNULLになる箇所などがあります。
ビューのDEFAULTの欄なので、実質的な違いはないのですが、
これって仕様なんでしょうか?
それともバージョン違いのせい?(5.0.22と5.0.45)
できれば両方とも同じ表示になるようにしたいのですが、
ビュー再作成ではダメでした…



類似してるかもしれないスレッド
- MySQL 総合 Part12 (1001) - [94%] - 2008/1/30 17:34 ○
- MySQL 総合 Part13 (996) - [94%] - 2008/6/10 21:02 ☆
- MySQL 総合 Part14 (1001) - [94%] - 2008/11/23 10:17 ☆
- MySQL 総合 Part15 (1001) - [94%] - 2009/4/20 12:15 ☆
- MySQL 総合 Part17 (1001) - [94%] - 2010/6/10 20:47 ○
- MySQL 総合 Part19 (982) - [94%] - 2011/6/9 2:33
- MySQL 総合 Part26 (860) - [89%] - 2023/2/2 9:30
- MySQL 総合 Part20 (995) - [89%] - 2011/10/17 4:48
- MySQL 総合 Part21 (1001) - [89%] - 2011/12/25 22:16
- MySQL 総合 Part22 (1001) - [89%] - 2012/7/10 16:45
- MySQL 総合 Part23 (992) - [89%] - 2013/8/11 17:00
- MySQL 総合 Part24 (1010) - [89%] - 2015/2/14 4:46
- MySQL 総合 Part25 (947) - [89%] - 2017/6/18 6:30
- MySQL vs PostgreSQL Part2 (941) - [31%] - 2022/5/26 1:30 ○
トップメニューへ / →のくす牧場書庫について