元スレMySQL 総合 Part15
mysql覧 / PC版 /みんなの評価 : ☆
351 = :
むー
結合したSQLで両テーブルともちゃんとインデックス使ってるじゃん
これでどうして遅いんだ?
limitしないと100万件とかヒットする巨大データとか?
352 = :
んーまてよ
nameインデックスとcompany_name_indexインデックスがあるのか
show create table company\G と
show create table employee\G を見せてほしい
354 = :
バグじゃないよ
遅くならないDBMSがあったら教えてほしい
355 = :
>>351,352
何度もありがとうございます。以下が結果なんですけど、何か分かりますでしょうか。
もしかして、MyISAMだと制限があるとか?
mysql> show create table company¥G
*************************** 1. row ***************************
Table: company
Create Table: CREATE TABLE `company` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `company_name_index` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
1 row in set (0.32 sec)
mysql> show create table employee¥G
*************************** 1. row ***************************
Table: employee
Create Table: CREATE TABLE `employee` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL,
`company_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `employee_company_id_index` (`company_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
356 = :
UNIQUE KEY `name` (`name`),
KEY `company_name_index` (`name`)
なんで同じの二個作ってるの
UNIQUEじゃない方消そう
でも参照性能自体は特に問題ないはずだなー
速い遅いって何ミリ秒の話をしてる?
でも今日は寝る
357 = :
遅くなるのはfilesortになってるからだろうな。
試しにorder byしないと応答速いんじゃね?
358 = :
>>357
おっしゃる通りです。
order by がないとすごく速いです。
Oracleだとヒント文をSQLに付加できるそうですが、MySQLでもそのような機能があるのでしょうか。
360 = :
ソートが遅いんだったら、
パラメータのsort_buffer_sizeを増やしてみる。
デフォルト2MBなので、まずは20MB(20971520)とか。
MySQLでもOracleのヒント句のように
インデックスを使わせたりテーブル結合順を制御することはできる。
だけど現状最適なので、ヒント句を書く内容の候補がない。
361 = :
同じ属性のフィールドを複数同時に加えることってできませんか?
alter table tbl add a,b int
みたいな感じでやってもエラーだったんですけど
地道に一個ずつやるしかないですか?
362 = :
alter table tbl add (b int, c int);
これでできたよ
363 = :
>>362
できました! ありがとうございます!
368 = :
あのテーブルはいくつでも結合する事が可能なんでしょうか?
結合するテーブルが多いほど処理速度が遅くなると考えていいのでしょうか?
369 = :
いくつ結合するつもりなん?
370 = :
61個。
mysql> select count(*) from t t0
-> inner join t t1
-> inner join t t2
-> inner join t t3
-> inner join t t4
-> inner join t t5
…
-> inner join t t69
-> ;
ERROR 1116 (HY000): Too many tables; MySQL can only use 61 tables in a join
> 結合するテーブルが多いほど処理速度が遅くなると考えていいのでしょうか?
Yes。
うちの開発では
「テーブル結合はOracleは5つまで、MySQLは3つまでにしてください」
って言ってる。
371 = :
わざわざ作ったんかwwww
373 = :
正規化って言葉を知ってるならどうすればいいかくらいすぐ分かるだろうに
374 = :
>>372
あったまかてぇなぁ~
376 = :
MySQLにはクエリキャッシュ機能がありますが、
あれをオンにすると速くなるのはわかるのですが、
なにかトレードオフみたいなのあります?
いまからクエリキャッシュをオンにしようと思うのですが
気をつけなきゃいけないことがあれば教えてください。
378 = :
>>377
当たり前かも知れないけど、あるテーブルが更新されると、
そのテーブルのキャッシュが破棄されるんだよね?
379 = :
なら更新した直後に自動でキャッシュ作ってくれればいいのに
380 = :
そういうのはmemcachedの役目だろう
381 = :
数十人にそれぞれコメント欄としてvarchar(255)を30くらい定義して
新しいコメントが入ったら古いコメントを削除するみたいなことを
やりたいんですが
IDを1つとvarcharを1~30まで定義しておいて、新しいコメントがきたら
1~29のvarcharを1つずつ後ろにupdateしてずらし、1に新しいコマンドを
updateする
数十人それぞれにテーブルを作成し、新しいコメントがきたらそれをinsert
そして一番古く作成されたコメントをdeleteする
どっちのほうがいいでしょうか、もしくはもっといい方法がありますでしょうか
最初のほうは処理に時間がかかりそうですし、二つ目はテーブルってそんな
数十人に一個ずつ作るものなのか不安というかなんというか
どうか教えてくださいお願いします
382 = :
正規化勉強しろと
この後のレスで説教されると思います
383 = :
>>383
そのお言葉大変ありがたいです。ありがとうございます
正規化勉強してきます
384 = :
すいません、わかりました
IDと本文(varchar255)一つとTIMESTAMPをフィールドにして
やればよかったんですね
こうやればレコードの数は膨大になりますが、insertとdeleteもできるし
テーブルも一個で済みますね
385 = :
膨大...?
386 = :
PDOのfetchの使い方わかんないんで
誰か教えて
387 = :
いいよ
388 = :
データーベースから、fetchで情報を取ってきて、
それを画面に表示したいんだけど、なぜか
オプション?が45個もあって、
何をどうしたらいいのか、わからないんです
389 = :
何オプションって?
390 = :
ZFS+MySQL+MyISAMではこの程度。
./mysqlbench -U test -P test -c 50 -t 100 testdb
tps (include connections establishing) . : 373.115227
tps (exclude connections establishing) . : 373.576012
がしかし、これに後からSSDをcacheとして加えると。
tps (include connections establishing) . : 1120.192135
tps (exclude connections establishing) . : 1124.534049
くらいまで上がりました。 少し嬉しかった。
391 = :
varchar(int)のintをどれくらいに設定したらいいかわからないから
とりあえずちょっと多めにしとくか、みたいな自分の性格に影響している値を
入れているのですがそこまでこだわる必要なないのでしょうか?
392 = :
>>391
男は黙って255
393 = :
なんのために設定するのかを知らないと意味ないのでは・・・
394 = :
PHPでやっているんですが
ソートして最小から数えて4番目のレコードを取り出したいとき
whereをつかってピンポイントにそのレコードだけselectできるでしょうか?
それともPHP側でmysql_fetch_arrayでソートしたデータを全部selectして
配列の要素で4を指定して使わないとダメですか?
395 = :
悩んだら100にしてる
396 = :
すいません、4番目だったら要素は3入れないとダメですね
397 = :
>>394
mysql> select * from t order by c1;
+------+------+
| c1 | c2 |
+------+------+
| 1 | a |
| 2 | a |
| 3 | a |
| 4 | a |
| 5 | a |
| 6 | a |
+------+------+
6 rows in set (0.00 sec)
mysql> select * from t order by c1 limit 3, 1;
+------+------+
| c1 | c2 |
+------+------+
| 4 | a |
+------+------+
1 row in set (0.00 sec)
399 = :
「ソートして最小から数えて」だからあるんじゃない?
あーでも同着4位があるとまずいな
400 = :
なるほど、limitをうまく使えばできるんですね
ありがとうございました
みんなの評価 : ☆
類似してるかもしれないスレッド
- MySQL 総合 Part12 (1001) - [94%] - 2008/1/30 17:34 ○
- MySQL 総合 Part25 (947) - [94%] - 2017/6/18 6:30
- MySQL 総合 Part13 (996) - [94%] - 2008/6/10 21:02 ☆
- MySQL 総合 Part14 (1001) - [94%] - 2008/11/23 10:17 ☆
- MySQL 総合 Part17 (1001) - [94%] - 2010/6/10 20:47 ○
- MySQL 総合 Part18 (986) - [94%] - 2011/1/17 15:46
- 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 vs PostgreSQL Part2 (941) - [31%] - 2022/5/26 1:30 ○
トップメニューへ / →のくす牧場書庫について