私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレMySQL 総合 Part15
mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 : ☆
レスフィルター : (試験中)
むー
結合したSQLで両テーブルともちゃんとインデックス使ってるじゃん
これでどうして遅いんだ?
limitしないと100万件とかヒットする巨大データとか?
結合したSQLで両テーブルともちゃんとインデックス使ってるじゃん
これでどうして遅いんだ?
limitしないと100万件とかヒットする巨大データとか?
んーまてよ
nameインデックスとcompany_name_indexインデックスがあるのか
show create table company\G と
show create table employee\G を見せてほしい
nameインデックスとcompany_name_indexインデックスがあるのか
show create table company\G と
show create table employee\G を見せてほしい
>>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)
何度もありがとうございます。以下が結果なんですけど、何か分かりますでしょうか。
もしかして、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)
UNIQUE KEY `name` (`name`),
KEY `company_name_index` (`name`)
なんで同じの二個作ってるの
UNIQUEじゃない方消そう
でも参照性能自体は特に問題ないはずだなー
速い遅いって何ミリ秒の話をしてる?
でも今日は寝る
KEY `company_name_index` (`name`)
なんで同じの二個作ってるの
UNIQUEじゃない方消そう
でも参照性能自体は特に問題ないはずだなー
速い遅いって何ミリ秒の話をしてる?
でも今日は寝る
遅くなるのはfilesortになってるからだろうな。
試しにorder byしないと応答速いんじゃね?
試しにorder byしないと応答速いんじゃね?
ソートが遅いんだったら、
パラメータのsort_buffer_sizeを増やしてみる。
デフォルト2MBなので、まずは20MB(20971520)とか。
MySQLでもOracleのヒント句のように
インデックスを使わせたりテーブル結合順を制御することはできる。
だけど現状最適なので、ヒント句を書く内容の候補がない。
パラメータのsort_buffer_sizeを増やしてみる。
デフォルト2MBなので、まずは20MB(20971520)とか。
MySQLでもOracleのヒント句のように
インデックスを使わせたりテーブル結合順を制御することはできる。
だけど現状最適なので、ヒント句を書く内容の候補がない。
同じ属性のフィールドを複数同時に加えることってできませんか?
alter table tbl add a,b int
みたいな感じでやってもエラーだったんですけど
地道に一個ずつやるしかないですか?
alter table tbl add a,b int
みたいな感じでやってもエラーだったんですけど
地道に一個ずつやるしかないですか?
alter table tbl add (b int, c int);
これでできたよ
これでできたよ
>>362
できました! ありがとうございます!
できました! ありがとうございます!
3.23って複合インデックスないんだっけ?あるよね?
mysql> create unique index t_c1c2 on t (c1, c2);
Query OK, 9 rows affected (0.17 sec)
Records: 9 Duplicates: 0 Warnings: 0
mysql> insert into t values (5, 'a');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t values (5, 'b');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t values (5, 'a');
ERROR 1062 (23000): Duplicate entry '5-a' for key 't_c1c2'
mysql> create unique index t_c1c2 on t (c1, c2);
Query OK, 9 rows affected (0.17 sec)
Records: 9 Duplicates: 0 Warnings: 0
mysql> insert into t values (5, 'a');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t values (5, 'b');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t values (5, 'a');
ERROR 1062 (23000): Duplicate entry '5-a' for key 't_c1c2'
あのテーブルはいくつでも結合する事が可能なんでしょうか?
結合するテーブルが多いほど処理速度が遅くなると考えていいのでしょうか?
結合するテーブルが多いほど処理速度が遅くなると考えていいのでしょうか?
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つまでにしてください」
って言ってる。
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つまでにしてください」
って言ってる。
>>372
あったまかてぇなぁ~
あったまかてぇなぁ~
何故トヨタ日産がclientかよくわからないけど、
・client_listリレーションからperson_idを削除
・新たにperson_idとclient_idの2属性を持つリレーションを作成
・client_listリレーションからperson_idを削除
・新たにperson_idとclient_idの2属性を持つリレーションを作成
MySQLにはクエリキャッシュ機能がありますが、
あれをオンにすると速くなるのはわかるのですが、
なにかトレードオフみたいなのあります?
いまからクエリキャッシュをオンにしようと思うのですが
気をつけなきゃいけないことがあれば教えてください。
あれをオンにすると速くなるのはわかるのですが、
なにかトレードオフみたいなのあります?
いまからクエリキャッシュをオンにしようと思うのですが
気をつけなきゃいけないことがあれば教えてください。
・一発でも更新クエリが流れるとキャッシュ全クリアされる
・サーバサイドPreparedStatementを使っていると役に立たない(5.0)
99.99%が参照のみっていうDBじゃないと意味がない機能。
でもトレードオフはほとんどないです
・サーバサイドPreparedStatementを使っていると役に立たない(5.0)
99.99%が参照のみっていうDBじゃないと意味がない機能。
でもトレードオフはほとんどないです
数十人にそれぞれコメント欄としてvarchar(255)を30くらい定義して
新しいコメントが入ったら古いコメントを削除するみたいなことを
やりたいんですが
IDを1つとvarcharを1~30まで定義しておいて、新しいコメントがきたら
1~29のvarcharを1つずつ後ろにupdateしてずらし、1に新しいコマンドを
updateする
数十人それぞれにテーブルを作成し、新しいコメントがきたらそれをinsert
そして一番古く作成されたコメントをdeleteする
どっちのほうがいいでしょうか、もしくはもっといい方法がありますでしょうか
最初のほうは処理に時間がかかりそうですし、二つ目はテーブルってそんな
数十人に一個ずつ作るものなのか不安というかなんというか
どうか教えてくださいお願いします
新しいコメントが入ったら古いコメントを削除するみたいなことを
やりたいんですが
IDを1つとvarcharを1~30まで定義しておいて、新しいコメントがきたら
1~29のvarcharを1つずつ後ろにupdateしてずらし、1に新しいコマンドを
updateする
数十人それぞれにテーブルを作成し、新しいコメントがきたらそれをinsert
そして一番古く作成されたコメントをdeleteする
どっちのほうがいいでしょうか、もしくはもっといい方法がありますでしょうか
最初のほうは処理に時間がかかりそうですし、二つ目はテーブルってそんな
数十人に一個ずつ作るものなのか不安というかなんというか
どうか教えてくださいお願いします
すいません、わかりました
IDと本文(varchar255)一つとTIMESTAMPをフィールドにして
やればよかったんですね
こうやればレコードの数は膨大になりますが、insertとdeleteもできるし
テーブルも一個で済みますね
IDと本文(varchar255)一つとTIMESTAMPをフィールドにして
やればよかったんですね
こうやればレコードの数は膨大になりますが、insertとdeleteもできるし
テーブルも一個で済みますね
データーベースから、fetchで情報を取ってきて、
それを画面に表示したいんだけど、なぜか
オプション?が45個もあって、
何をどうしたらいいのか、わからないんです
それを画面に表示したいんだけど、なぜか
オプション?が45個もあって、
何をどうしたらいいのか、わからないんです
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
くらいまで上がりました。 少し嬉しかった。
./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
くらいまで上がりました。 少し嬉しかった。
varchar(int)のintをどれくらいに設定したらいいかわからないから
とりあえずちょっと多めにしとくか、みたいな自分の性格に影響している値を
入れているのですがそこまでこだわる必要なないのでしょうか?
とりあえずちょっと多めにしとくか、みたいな自分の性格に影響している値を
入れているのですがそこまでこだわる必要なないのでしょうか?
>>391
男は黙って255
男は黙って255
PHPでやっているんですが
ソートして最小から数えて4番目のレコードを取り出したいとき
whereをつかってピンポイントにそのレコードだけselectできるでしょうか?
それともPHP側でmysql_fetch_arrayでソートしたデータを全部selectして
配列の要素で4を指定して使わないとダメですか?
ソートして最小から数えて4番目のレコードを取り出したいとき
whereをつかってピンポイントにそのレコードだけselectできるでしょうか?
それともPHP側でmysql_fetch_arrayでソートしたデータを全部selectして
配列の要素で4を指定して使わないとダメですか?
>>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)
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)
「ソートして最小から数えて」だからあるんじゃない?
あーでも同着4位があるとまずいな
あーでも同着4位があるとまずいな
前へ 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 総合 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 ○
トップメニューへ / →のくす牧場書庫について