元スレMySQL 総合 Part19
mysql覧 / PC版 /みんなの評価 :
102 = :
キャッシュ
適切なインデックスを張る
memcached / KVS
メモリにデータが乗るかどうか(乗り切れないとHDDへの物理アクセス発生して劇遅)
などで調べてみると少し入り口が見えるかもしれません
103 :
カラム数が80個ほどでレコード数が1000万件くらいのテーブルが
40個あります。
40個のテーブルには随時更新がかかる状態なんですが、
この40個のテーブルのある瞬間のデータを取得したい時って
どうすればよいですか?
データを取得するときには更新とかを行わせたくないのですが、
ロックするしか無いのでしょうか?
104 = :
>>101
データ件数によるパフォーマンスの劣化を気にするなら、30万件なり1200万件なり用意して
テストしてみるのが一番だと思う。
技術的にどうしているって訊かれても、実際に近いデータを用意して色々試して、EXPLAIN
でその違いを調べる、の繰り返しかな。
本とかに書いてある知識は、その調査のための手がかりかきっかけみたいなもので、そのもの
ずばりとノウハウにはあまりなってない。少なくとも自分はそう思っている。
108 = :
プログラムの巧拙とテーブル設計の巧拙による・・・としか言いようがないな。
109 = :
mysqlの排他制御を自動でしてくれるのはphpぐらい?
110 = :
いやトランザクションなやInnodbがやってくれるじゃん
112 = :
ALTER TABLE tbl AUTO_INCREMENT = 10000;
115 = :
>>112
ありがとうございました
116 = :
FROMがFORMになって全然気づかなくて困ったことあるヤツ挙手
117 = :
mysqlは
fromキーワードが指定の位置にありません
って言われないのか
118 = :
接続時間・負荷テストをしたいんですが、
みなさん数万件レベルのデータってどのように取得しているんでしょうか?
MySQL データ 数万件 サンプルあたりで調べてもヒットせず…
120 = :
趣旨がよく分からん
プログラムでランダムに文字列作ってinsertするんじゃ駄目なのか?
数万行のinsertなら数秒で終わるだろ
121 = :
適当に数十件程度の元データを作って、select,insertを繰り返していけば
倍々に増えていくから何件だろうが
作業自体は簡単。
124 = :
> 商品リストテーブルをJOINしたいのですがなかなかうまくいきません。
どのようにうまく行かないのですか?
どんなSQLを書いてみたかもわからないから応え難いです
128 = :
>>127
30クエリバラバラにしたほうが早そうだな。
129 = :
1つのテーブル内にあるフィールド2つをまとめて
ひとつユニークキーみたい(重複不可能)に
したいのですが、どうやるのでしょうか?
MyISAMです。
130 = :
>>129
http://dev.mysql.com/doc/refman/4.1/ja/multiple-column-indexes.html
131 = :
>>127
MySQLでテーブル二桁JOINする時点でたぶんダメ。
Oracleと同じJOIN順になるようにFROM句並べ替えてSTRAIGHT_JOINつけてみて、
改善されないようならOracle買うかPostgreSQLで。
133 = :
>>132
mysql -u root -pパスワード < dump.sql
だったらどうなる?
134 = :
>>133
ありがとございます
135 = :
「MySQLは1つのクエリーで1つのテーブルに対し、1つのインデックスしか機能しない」
というのを見かけたのですが
これって5.1でもそうなのでしょうか?
1つのテーブルに複数のインデックスをつけても意味が無いというわけ?
136 = :
>>135
INDEX MERGEは前からあるので「1つのインデックスしか~」は嘘。
http://dev.mysql.com/doc/refman/5.0/en/index-merge-optimization.html
ただ個人的にINDEX MERGEで速くなった経験はないな。OracleでもMySQLでも。
手抜きしないで複合INDEX作った方がいい。
137 = :
>>129>>131
クエリをバラすと、テストデータ程度の件数に置いては他のDBMSと遜色ないレベルに
なることがわかりました。
が、データ量が増えた際の不安が残っておりますので、他のプロダクトへの
乗り換えも含めて検討したいと考えています。
ありがとうございました。
139 = :
Aテーブルに、
c1, c2, c3, c4, c5, c6
という6個のカラムがあり、
このうち3個以上がnullでない行を取り出したいのですが、
SQLでどう表現すればいいのか分かりません。
分かる方がいましたら教えてください。お願い致します。
141 = :
>>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
142 = :
>>141
頭いいな
143 = :
へーこんな書くんかー
144 = :
>>141
ありがとうございました!
無事期待通りの動作を実現できました。
JOINとかサブクエリとかごちゃごちゃ使わないと無理だと思っていたので目から鱗でした。
145 = :
すいません名前間違えました。
146 = :
>>141
Excel VBAだなw
147 :
>>103
InnoDBなら、トランザクション分離レベルを適切に設定してあげればできそう。
148 = :
現場で使える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を出力するような、その他の例外と言うのがどういう状況の事を言っているのか分かりません。
149 = :
既存のテーブルのcreate文を確認する方法ってありますか?
ご存知でしたら教えていただきたいです。
150 = :
>>149 バックアップの中身を見たことあるか?
みんなの評価 :
類似してるかもしれないスレッド
- 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 ○
トップメニューへ / →のくす牧場書庫について