私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレMySQL 総合 Part19
mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
キャッシュ
適切なインデックスを張る
memcached / KVS
メモリにデータが乗るかどうか(乗り切れないとHDDへの物理アクセス発生して劇遅)
などで調べてみると少し入り口が見えるかもしれません
適切なインデックスを張る
memcached / KVS
メモリにデータが乗るかどうか(乗り切れないとHDDへの物理アクセス発生して劇遅)
などで調べてみると少し入り口が見えるかもしれません
カラム数が80個ほどでレコード数が1000万件くらいのテーブルが
40個あります。
40個のテーブルには随時更新がかかる状態なんですが、
この40個のテーブルのある瞬間のデータを取得したい時って
どうすればよいですか?
データを取得するときには更新とかを行わせたくないのですが、
ロックするしか無いのでしょうか?
40個あります。
40個のテーブルには随時更新がかかる状態なんですが、
この40個のテーブルのある瞬間のデータを取得したい時って
どうすればよいですか?
データを取得するときには更新とかを行わせたくないのですが、
ロックするしか無いのでしょうか?
>>101
データ件数によるパフォーマンスの劣化を気にするなら、30万件なり1200万件なり用意して
テストしてみるのが一番だと思う。
技術的にどうしているって訊かれても、実際に近いデータを用意して色々試して、EXPLAIN
でその違いを調べる、の繰り返しかな。
本とかに書いてある知識は、その調査のための手がかりかきっかけみたいなもので、そのもの
ずばりとノウハウにはあまりなってない。少なくとも自分はそう思っている。
データ件数によるパフォーマンスの劣化を気にするなら、30万件なり1200万件なり用意して
テストしてみるのが一番だと思う。
技術的にどうしているって訊かれても、実際に近いデータを用意して色々試して、EXPLAIN
でその違いを調べる、の繰り返しかな。
本とかに書いてある知識は、その調査のための手がかりかきっかけみたいなもので、そのもの
ずばりとノウハウにはあまりなってない。少なくとも自分はそう思っている。
phpがmysqlにデータ書き込みしてる最中に
pythonのプログラムも同じテーブルに重複して書き込みするとどうなるの?
pythonのプログラムも同じテーブルに重複して書き込みするとどうなるの?
不要なテーブルtbを削除しようとしたところ、外部キーの関係と思われるエラーで削除できません。
制約やインデクスの削除もできないため、試しに関連のfrmファイル等を直接削除(移動)してみました。
動作上は現在のところ何ごともないようなのですが、
別に管理データが残ったりなど、何か問題起こりうるものでしょうか。
制約やインデクスの削除もできないため、試しに関連のfrmファイル等を直接削除(移動)してみました。
動作上は現在のところ何ごともないようなのですが、
別に管理データが残ったりなど、何か問題起こりうるものでしょうか。
>>112
ありがとうございました
ありがとうございました
接続時間・負荷テストをしたいんですが、
みなさん数万件レベルのデータってどのように取得しているんでしょうか?
MySQL データ 数万件 サンプルあたりで調べてもヒットせず…
みなさん数万件レベルのデータってどのように取得しているんでしょうか?
MySQL データ 数万件 サンプルあたりで調べてもヒットせず…
>>118
つ wikipedia
つ wikipedia
趣旨がよく分からん
プログラムでランダムに文字列作ってinsertするんじゃ駄目なのか?
数万行のinsertなら数秒で終わるだろ
プログラムでランダムに文字列作ってinsertするんじゃ駄目なのか?
数万行のinsertなら数秒で終わるだろ
適当に数十件程度の元データを作って、select,insertを繰り返していけば
倍々に増えていくから何件だろうが
作業自体は簡単。
倍々に増えていくから何件だろうが
作業自体は簡単。
MySQL5+PHP5で勉強している初心者です。
現在、架空の倉庫を想定して勉強しているのですが、
UNIONした後にJOINするとこでつまずいています。
phpで実行する前にphpmyadmin上でテストしているのですが…
<商品リストテーブル>
商品ナンバー,商品名
<在庫テーブル>
商品ナンバー,ロットナンバー,在庫数
<出庫テーブル>
商品ナンバー,ロットナンバー,出庫数
上記のような3つのテーブルを用意しています。
まず、商品ナンバー毎の総合計数(在庫合計-出庫数)を出したかったので
SELECT 商品ナンバー,SUM(在庫数) as 在庫合計 FROM (
SELECT 商品ナンバー,在庫数 FROM 在庫テーブル
UNION
SELECT 商品ナンバー,-(出庫数) as 在庫数 FROM 出庫テーブル
) as test group by 商品ナンバー
で出庫データを反映させた現在庫数が表示されるところまで出来ました。
で、最終目的としては
商品ナンバー,商品名,在庫合計
と表示させたいので
商品リストテーブルをJOINしたいのですがなかなかうまくいきません。
どうすれば最終目的に辿りつけるのでしょうか?
ご教示お願い致します。
現在、架空の倉庫を想定して勉強しているのですが、
UNIONした後にJOINするとこでつまずいています。
phpで実行する前にphpmyadmin上でテストしているのですが…
<商品リストテーブル>
商品ナンバー,商品名
<在庫テーブル>
商品ナンバー,ロットナンバー,在庫数
<出庫テーブル>
商品ナンバー,ロットナンバー,出庫数
上記のような3つのテーブルを用意しています。
まず、商品ナンバー毎の総合計数(在庫合計-出庫数)を出したかったので
SELECT 商品ナンバー,SUM(在庫数) as 在庫合計 FROM (
SELECT 商品ナンバー,在庫数 FROM 在庫テーブル
UNION
SELECT 商品ナンバー,-(出庫数) as 在庫数 FROM 出庫テーブル
) as test group by 商品ナンバー
で出庫データを反映させた現在庫数が表示されるところまで出来ました。
で、最終目的としては
商品ナンバー,商品名,在庫合計
と表示させたいので
商品リストテーブルをJOINしたいのですがなかなかうまくいきません。
どうすれば最終目的に辿りつけるのでしょうか?
ご教示お願い致します。
> 商品リストテーブルをJOINしたいのですがなかなかうまくいきません。
どのようにうまく行かないのですか?
どんなSQLを書いてみたかもわからないから応え難いです
どのようにうまく行かないのですか?
どんなSQLを書いてみたかもわからないから応え難いです
言葉足らずで申し訳ありませんでした
>>123から試行錯誤した結果、
SELECT * FROM 商品リストテーブル RIGHT JOIN(
SELECT 商品ナンバー,SUM(在庫数) as 在庫合計 FROM (
SELECT 商品ナンバー,在庫数 FROM 在庫テーブル
UNION
SELECT 商品ナンバー,-(出庫数) as 在庫数 FROM 出庫テーブル
) u1 group by 商品ナンバー) as test ON 商品リストテーブル.商品ナンバー=test.商品ナンバー
上記で一応は期待する結果が得られましたが、
これでいいものなのでしょうか?
>>123から試行錯誤した結果、
SELECT * FROM 商品リストテーブル RIGHT JOIN(
SELECT 商品ナンバー,SUM(在庫数) as 在庫合計 FROM (
SELECT 商品ナンバー,在庫数 FROM 在庫テーブル
UNION
SELECT 商品ナンバー,-(出庫数) as 在庫数 FROM 出庫テーブル
) u1 group by 商品ナンバー) as test ON 商品リストテーブル.商品ナンバー=test.商品ナンバー
上記で一応は期待する結果が得られましたが、
これでいいものなのでしょうか?
>>123
「マイナス出庫数」を並べてSUMを取るって筋悪じゃね
mysql> SELECT * FROM item;
+---------+-----------+
| item_no | item_name |
+---------+-----------+
| 1 | apple |
| 2 | orange |
+---------+-----------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM stock;
+---------+--------+-----------+
| item_no | lot_no | stock_qty |
+---------+--------+-----------+
| 1 | 1 | 100 |
| 1 | 2 | 50 |
| 2 | 1 | 80 |
| 2 | 2 | 40 |
+---------+--------+-----------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM delivery;
+---------+--------+--------------+
| item_no | lot_no | delivery_qty |
+---------+--------+--------------+
| 1 | 1 | 15 |
| 1 | 2 | 25 |
| 2 | 1 | 35 |
| 2 | 2 | 45 |
+---------+--------+--------------+
4 rows in set (0.00 sec)
SELECT i.item_no, i.item_name, s.s_q - d.d_q total FROM item i,
(SELECT item_no, SUM(stock_qty) AS s_q FROM stock group by item_no) s,
(SELECT item_no, SUM(delivery_qty) AS d_q FROM delivery group by item_no) d
WHERE i.item_no = s.item_no
AND s.item_no = d.item_no
;
+---------+-----------+-------+
| item_no | item_name | total |
+---------+-----------+-------+
| 1 | apple | 110 |
| 2 | orange | 40 |
+---------+-----------+-------+
2 rows in set (0.00 sec)
こんな感じ
「マイナス出庫数」を並べてSUMを取るって筋悪じゃね
mysql> SELECT * FROM item;
+---------+-----------+
| item_no | item_name |
+---------+-----------+
| 1 | apple |
| 2 | orange |
+---------+-----------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM stock;
+---------+--------+-----------+
| item_no | lot_no | stock_qty |
+---------+--------+-----------+
| 1 | 1 | 100 |
| 1 | 2 | 50 |
| 2 | 1 | 80 |
| 2 | 2 | 40 |
+---------+--------+-----------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM delivery;
+---------+--------+--------------+
| item_no | lot_no | delivery_qty |
+---------+--------+--------------+
| 1 | 1 | 15 |
| 1 | 2 | 25 |
| 2 | 1 | 35 |
| 2 | 2 | 45 |
+---------+--------+--------------+
4 rows in set (0.00 sec)
SELECT i.item_no, i.item_name, s.s_q - d.d_q total FROM item i,
(SELECT item_no, SUM(stock_qty) AS s_q FROM stock group by item_no) s,
(SELECT item_no, SUM(delivery_qty) AS d_q FROM delivery group by item_no) d
WHERE i.item_no = s.item_no
AND s.item_no = d.item_no
;
+---------+-----------+-------+
| item_no | item_name | total |
+---------+-----------+-------+
| 1 | apple | 110 |
| 2 | orange | 40 |
+---------+-----------+-------+
2 rows in set (0.00 sec)
こんな感じ
どなたか以下の問題エスパーしていただけないでしょうか。
InnoDBでINNER/LEFT OUTER JOINを30くらい(大半はINNER JOIN。ネストしてるものも有り。)つないでるSELECTが
もっさりしてます。
EXPLAINで確認しましたがtypeは全てeq_refでした。
profilingで見てみるとstaticticsという部分が99%以上時間を占めているのですが
パラメータ設定などで見直すべきところはどこでしょうか…?
innodb_buffer_pool_sizeをデフォルト値から増加させたところ若干は改善しましたが、本当に若干でした。
join_buffer_sizeなど、説明を読む限り今回関係なさそうなパラメータも増やしてみたりしましたが、案の定意味が無いようでした。
また、上のクエリにさらにLEFT OUTER JOINを1つ(typeはref)を加えると
応答しなくなりました…
1つのテーブルにはそれぞれ数件程度しか登録しておらず、SELECTの結果も10件未満になるようなデータでテストしています。
試しにOracle XEで同じデータに同様のSELECTを投げてみると瞬殺でした。
MySQLのバージョンは5.1/5.5で試しましたがいずれも同じ結果でした。
InnoDBでINNER/LEFT OUTER JOINを30くらい(大半はINNER JOIN。ネストしてるものも有り。)つないでるSELECTが
もっさりしてます。
EXPLAINで確認しましたがtypeは全てeq_refでした。
profilingで見てみるとstaticticsという部分が99%以上時間を占めているのですが
パラメータ設定などで見直すべきところはどこでしょうか…?
innodb_buffer_pool_sizeをデフォルト値から増加させたところ若干は改善しましたが、本当に若干でした。
join_buffer_sizeなど、説明を読む限り今回関係なさそうなパラメータも増やしてみたりしましたが、案の定意味が無いようでした。
また、上のクエリにさらにLEFT OUTER JOINを1つ(typeはref)を加えると
応答しなくなりました…
1つのテーブルにはそれぞれ数件程度しか登録しておらず、SELECTの結果も10件未満になるようなデータでテストしています。
試しにOracle XEで同じデータに同様のSELECTを投げてみると瞬殺でした。
MySQLのバージョンは5.1/5.5で試しましたがいずれも同じ結果でした。
>>127
30クエリバラバラにしたほうが早そうだな。
30クエリバラバラにしたほうが早そうだな。
1つのテーブル内にあるフィールド2つをまとめて
ひとつユニークキーみたい(重複不可能)に
したいのですが、どうやるのでしょうか?
MyISAMです。
ひとつユニークキーみたい(重複不可能)に
したいのですが、どうやるのでしょうか?
MyISAMです。
>>127
MySQLでテーブル二桁JOINする時点でたぶんダメ。
Oracleと同じJOIN順になるようにFROM句並べ替えてSTRAIGHT_JOINつけてみて、
改善されないようならOracle買うかPostgreSQLで。
MySQLでテーブル二桁JOINする時点でたぶんダメ。
Oracleと同じJOIN順になるようにFROM句並べ替えてSTRAIGHT_JOINつけてみて、
改善されないようならOracle買うかPostgreSQLで。
>>133
ありがとございます
ありがとございます
「MySQLは1つのクエリーで1つのテーブルに対し、1つのインデックスしか機能しない」
というのを見かけたのですが
これって5.1でもそうなのでしょうか?
1つのテーブルに複数のインデックスをつけても意味が無いというわけ?
というのを見かけたのですが
これって5.1でもそうなのでしょうか?
1つのテーブルに複数のインデックスをつけても意味が無いというわけ?
>>135
INDEX MERGEは前からあるので「1つのインデックスしか~」は嘘。
http://dev.mysql.com/doc/refman/5.0/en/index-merge-optimization.html
ただ個人的にINDEX MERGEで速くなった経験はないな。OracleでもMySQLでも。
手抜きしないで複合INDEX作った方がいい。
INDEX MERGEは前からあるので「1つのインデックスしか~」は嘘。
http://dev.mysql.com/doc/refman/5.0/en/index-merge-optimization.html
ただ個人的にINDEX MERGEで速くなった経験はないな。OracleでもMySQLでも。
手抜きしないで複合INDEX作った方がいい。
Aテーブルに、
c1, c2, c3, c4, c5, c6
という6個のカラムがあり、
このうち3個以上がnullでない行を取り出したいのですが、
SQLでどう表現すればいいのか分かりません。
分かる方がいましたら教えてください。お願い致します。
c1, c2, c3, c4, c5, c6
という6個のカラムがあり、
このうち3個以上がnullでない行を取り出したいのですが、
SQLでどう表現すればいいのか分かりません。
分かる方がいましたら教えてください。お願い致します。
>>138
CentOSならRHEL用のRPMを使えばいいのでは
CentOSならRHEL用のRPMを使えばいいのでは
>>139
WHERE IF(c1 IS NOT NULL, 1, 0)
+ IF(c2 IS NOT NULL, 1, 0)
+ IF(c3 IS NOT NULL, 1, 0)
+ IF(c4 IS NOT NULL, 1, 0)
+ IF(c5 IS NOT NULL, 1, 0)
+ IF(c6 IS NOT NULL, 1, 0) >= 3
WHERE IF(c1 IS NOT NULL, 1, 0)
+ IF(c2 IS NOT NULL, 1, 0)
+ IF(c3 IS NOT NULL, 1, 0)
+ IF(c4 IS NOT NULL, 1, 0)
+ IF(c5 IS NOT NULL, 1, 0)
+ IF(c6 IS NOT NULL, 1, 0) >= 3
>>141
頭いいな
頭いいな
すいません名前間違えました。
>>141
Excel VBAだなw
Excel VBAだなw
現場で使えるSQLという本のP221の
「商品IDを引数で指定し、その卸単価を商品マスタから取得するストアドプロシージャを作成せよ
ただし、卸単価は引数に格納し、該当商品が無い場合は卸単価に-1、その他のエラーの場合は-2を格納せよ」
という問題にて、色々と試しまくって、結局
DROP PROCEDURE SP;
DELIMITER $$
CREATE PROCEDURE SP ( IN id int, OUT price int )
BEGIN
DECLARE CONTINUE HANDLER FOR SQLWARNING SET price = -2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET price = -1;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET price = -2;
SELECT 卸単価 INTO price
FROM 商品マスタ
WHERE 商品ID = id;
END $$
DELIMITER ;
CALL SP(15, @price);
SELECT @price;
とし-1が表示されました。
しかし、CALL SP(a, @price); 等とすると、-2と表示されるのかと思ったら、普通にエラーが出ました。
自分のSQL文がどこが間違っているのかご指摘願えませんか?
そもそも、-2を出力するような、その他の例外と言うのがどういう状況の事を言っているのか分かりません。
「商品IDを引数で指定し、その卸単価を商品マスタから取得するストアドプロシージャを作成せよ
ただし、卸単価は引数に格納し、該当商品が無い場合は卸単価に-1、その他のエラーの場合は-2を格納せよ」
という問題にて、色々と試しまくって、結局
DROP PROCEDURE SP;
DELIMITER $$
CREATE PROCEDURE SP ( IN id int, OUT price int )
BEGIN
DECLARE CONTINUE HANDLER FOR SQLWARNING SET price = -2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET price = -1;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET price = -2;
SELECT 卸単価 INTO price
FROM 商品マスタ
WHERE 商品ID = id;
END $$
DELIMITER ;
CALL SP(15, @price);
SELECT @price;
とし-1が表示されました。
しかし、CALL SP(a, @price); 等とすると、-2と表示されるのかと思ったら、普通にエラーが出ました。
自分のSQL文がどこが間違っているのかご指摘願えませんか?
そもそも、-2を出力するような、その他の例外と言うのがどういう状況の事を言っているのか分かりません。
既存のテーブルのcreate文を確認する方法ってありますか?
ご存知でしたら教えていただきたいです。
ご存知でしたら教えていただきたいです。
>>149 バックアップの中身を見たことあるか?
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- 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 総合 Part18 (986) - [94%] - 2011/1/17 15:46
- 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 ○
トップメニューへ / →のくす牧場書庫について