私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレMySQL 総合 Part24
mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
>>195
それってZEROFILL属性つけた時に何桁で揃えるかで、実際何桁格納できるかには関係なかったかと。
http://dev.mysql.com/doc/refman/5.6/en/numeric-type-attributes.html
それってZEROFILL属性つけた時に何桁で揃えるかで、実際何桁格納できるかには関係なかったかと。
http://dev.mysql.com/doc/refman/5.6/en/numeric-type-attributes.html
最近DBを学び始めた者ですが、複数テーブルをLEFT JOINして条件を付けた際の順序はどうなるのでしょうか?
例えば
SELECT * FROM a LEFT JOIN b USING (id) LEFT JOIN c on b.no = c.no WHERE c.no IN ( 1,2,3);
の場合、aにb→cの順でjoinし、最後にwhereの条件で絞るのでしょうか?
それとも、a→b joinの後に、where → c joinとなるのでしょうか?
どなたか教えて下さい。
例えば
SELECT * FROM a LEFT JOIN b USING (id) LEFT JOIN c on b.no = c.no WHERE c.no IN ( 1,2,3);
の場合、aにb→cの順でjoinし、最後にwhereの条件で絞るのでしょうか?
それとも、a→b joinの後に、where → c joinとなるのでしょうか?
どなたか教えて下さい。
>>202
他のRDBMSは知らないが、都度オプティマイザーがどっちが効率的かを判定して決める。
他のRDBMSは知らないが、都度オプティマイザーがどっちが効率的かを判定して決める。
>>202
他のRDBMSは知らないが、都度オプティマイザーがどっちが効率的かを判定して決める。
他のRDBMSは知らないが、都度オプティマイザーがどっちが効率的かを判定して決める。
インデックスについての質問です。マルチカラムインデックス作成するのってクエリ早くする上での対策として定石なんですか?
select * from hogehoge where a = 1 order by b limit 10;
とかのクエリはaとbのマルチカラムインデックス張らないとaのインデックスしか有効にならないって認識なんですが合ってますかね?
PostgreSQL普段使っててちと勉強中です。
select * from hogehoge where a = 1 order by b limit 10;
とかのクエリはaとbのマルチカラムインデックス張らないとaのインデックスしか有効にならないって認識なんですが合ってますかね?
PostgreSQL普段使っててちと勉強中です。
>>206
explain して比較してみればいいんじゃないの。
explain して比較してみればいいんじゃないの。
>>207
explainしてインデックスの利用状況確認してるんですが、一回のソートで一つのインデックスしか使われないんですね・・・。
実際にはjoinしてwhere かけているsql文なのですが、マルチカラムインデックスを作成してもuse index句を入れないとマルチカラムインデックスが使われませんでした。
設定とかでマルチカラムインデックスを優先して使ってもらう方法ってありますか? 特定のORM使ってるので、use index入れるのが辛いので・・・。
explainしてインデックスの利用状況確認してるんですが、一回のソートで一つのインデックスしか使われないんですね・・・。
実際にはjoinしてwhere かけているsql文なのですが、マルチカラムインデックスを作成してもuse index句を入れないとマルチカラムインデックスが使われませんでした。
設定とかでマルチカラムインデックスを優先して使ってもらう方法ってありますか? 特定のORM使ってるので、use index入れるのが辛いので・・・。
MySQLって結構クセがあるんですね。↓のようなクエリはインデックス使われないから別の方法考えた方がいいですよね?
select * from A inner join B on A.b_id = B.id where B.colum1 order by A.create_date;
select * from A inner join B on A.b_id = B.id where B.colum1 order by A.create_date;
間違えた・・こっちでした。
select * from A inner join B on A.b_id = B.id where B.colum1 = 'hogehoge' order by A.create_date;
select * from A inner join B on A.b_id = B.id where B.colum1 = 'hogehoge' order by A.create_date;
>>212
DDLも書かずにそう言われても答えようがない
DDLも書かずにそう言われても答えようがない
>>212
use indexはどうなった?利用したらどうなんだ?
use indexはどうなった?利用したらどうなんだ?
Oracle、PostgreSQLなど他のRDMSからMySQLに移動してきて
移行が成功したって思った後に最初につまづくのが大体
order by、group byや複合カラム等へのインデックスの適用がされていなくて
パフォーマンスがた落ちってとこだからな。要注意
移行が成功したって思った後に最初につまづくのが大体
order by、group byや複合カラム等へのインデックスの適用がされていなくて
パフォーマンスがた落ちってとこだからな。要注意
>>213
すいません、DDLはこんな感じです。
create table A (
id integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
create_date datetime
);
create table B (
id integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
column1 varchar(64)
);
>>214
ORM使ってる都合上、あんまりやりたくなかったです。でも使うのが定石なら仕方ないですね。
>>215
まじでそうですね・・・。ノウハウ積めればいいので良い経験にはなりますが、業務でこれはやりたくない・・。
ちなみにPostgreSQLに対してMySQLが優位なのって下記の点だと思ってるのですが他にありますか?
・同時接続数が増えてもパフォーマンスの劣化が起こりにくい
・レプリケーション機能が枯れているので安定性があり、情報がそこらじゅうに転がっている
・パーテショニングが比較的使いやすい
・設定が楽
オプティマイザが改良されてるMariaDBで試してみます。
すいません、DDLはこんな感じです。
create table A (
id integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
create_date datetime
);
create table B (
id integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
column1 varchar(64)
);
>>214
ORM使ってる都合上、あんまりやりたくなかったです。でも使うのが定石なら仕方ないですね。
>>215
まじでそうですね・・・。ノウハウ積めればいいので良い経験にはなりますが、業務でこれはやりたくない・・。
ちなみにPostgreSQLに対してMySQLが優位なのって下記の点だと思ってるのですが他にありますか?
・同時接続数が増えてもパフォーマンスの劣化が起こりにくい
・レプリケーション機能が枯れているので安定性があり、情報がそこらじゅうに転がっている
・パーテショニングが比較的使いやすい
・設定が楽
オプティマイザが改良されてるMariaDBで試してみます。
>>217
すいません、インデックスのDDL書くの忘れていました。
a.create_dateとb.column1にはインデックス張ってます。
マルチカラムインデックスも作成したのですが、joinとorder byを組み合わせるとuse indexを指定しないとインデックスを使ってくれませんでした。
すいません、インデックスのDDL書くの忘れていました。
a.create_dateとb.column1にはインデックス張ってます。
マルチカラムインデックスも作成したのですが、joinとorder byを組み合わせるとuse indexを指定しないとインデックスを使ってくれませんでした。
>>218
データの問題で使ってくれないだけじゃないかな?
うちではこういう結果になる (A.create_dateとB.column1はランダムで生成)
mysql> SHOW CREATE TABLE A \G SHOW CREATE TABLE B \G
*************************** 1. row ***************************
Table: A
Create Table: CREATE TABLE `A` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`create_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `A_create_date_idx` (`create_date`)
) ENGINE=InnoDB AUTO_INCREMENT=65521 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
*************************** 1. row ***************************
Table: B
Create Table: CREATE TABLE `B` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`column1` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=262135 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM A JOIN B ON B.id = A.id WHERE B.column1 = CAST(RAND() AS CHAR) ORDER BY A.create_date \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: A
type: index
possible_keys: PRIMARY
key: A_create_date_idx
key_len: 6
ref: NULL
rows: 33157
Extra: Using index
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: B
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 8
ref: test.A.id
rows: 1
Extra: Using where
2 rows in set (0.00 sec)
データの問題で使ってくれないだけじゃないかな?
うちではこういう結果になる (A.create_dateとB.column1はランダムで生成)
mysql> SHOW CREATE TABLE A \G SHOW CREATE TABLE B \G
*************************** 1. row ***************************
Table: A
Create Table: CREATE TABLE `A` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`create_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `A_create_date_idx` (`create_date`)
) ENGINE=InnoDB AUTO_INCREMENT=65521 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
*************************** 1. row ***************************
Table: B
Create Table: CREATE TABLE `B` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`column1` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=262135 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM A JOIN B ON B.id = A.id WHERE B.column1 = CAST(RAND() AS CHAR) ORDER BY A.create_date \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: A
type: index
possible_keys: PRIMARY
key: A_create_date_idx
key_len: 6
ref: NULL
rows: 33157
Extra: Using index
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: B
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 8
ref: test.A.id
rows: 1
Extra: Using where
2 rows in set (0.00 sec)
>>219
有難うございます、そこまでやって頂いて感謝です。
おっしゃる通り、どうやらデータ量(100万件ぐらい)が若干多いせいみたいでオプティマイザがインデックス使ってくれないみたいです。
色々試してみたのですが、下記の方法でインデックスを使ってくれるようになりました。
改善前 SELECT * FROM A JOIN B ON B.id = A.id WHERE B.column1 = CAST(RAND() AS CHAR) ORDER BY A.create_date;
改善後 SELECT * FROM A JOIN B ON B.id = A.id WHERE A.create_date < now() and B.column1 = CAST(RAND() AS CHAR) ORDER BY A.create_date;
思ったより面倒な対処しなくて済みそうで良かったです、有難うございます!
>>220
そうですね・・・ちとアホの子ですね・・・。小さい規模はPostgreSQLで、大規模はMySQLでってのが少しわかりました。
小さい規模はORMでSQL文気にしないでプログラムしても大抵インデックス使われるけど、MySQLはオプティマイザを考慮したSQL文書かないとダメだからちょっと工数かかる、その代りスケールしやすいって感じなんですかね。
有難うございます、そこまでやって頂いて感謝です。
おっしゃる通り、どうやらデータ量(100万件ぐらい)が若干多いせいみたいでオプティマイザがインデックス使ってくれないみたいです。
色々試してみたのですが、下記の方法でインデックスを使ってくれるようになりました。
改善前 SELECT * FROM A JOIN B ON B.id = A.id WHERE B.column1 = CAST(RAND() AS CHAR) ORDER BY A.create_date;
改善後 SELECT * FROM A JOIN B ON B.id = A.id WHERE A.create_date < now() and B.column1 = CAST(RAND() AS CHAR) ORDER BY A.create_date;
思ったより面倒な対処しなくて済みそうで良かったです、有難うございます!
>>220
そうですね・・・ちとアホの子ですね・・・。小さい規模はPostgreSQLで、大規模はMySQLでってのが少しわかりました。
小さい規模はORMでSQL文気にしないでプログラムしても大抵インデックス使われるけど、MySQLはオプティマイザを考慮したSQL文書かないとダメだからちょっと工数かかる、その代りスケールしやすいって感じなんですかね。
>>222
USE INDEXをつけてインデックスが使われた場合は0.03秒、使われなかった場合は1.2秒といった結果でした。
PostgreSQLは適当にSQL文書いても、割とインデックス使ってくれます・・・。
USE INDEXをつけてインデックスが使われた場合は0.03秒、使われなかった場合は1.2秒といった結果でした。
PostgreSQLは適当にSQL文書いても、割とインデックス使ってくれます・・・。
>>223
インデックスを使わないシークの数の上限設定ができたはず。
インデックスを使わないシークの数の上限設定ができたはず。
>>224
有難うございます、調べてみます。
有難うございます、調べてみます。
PostgreSQLを触っててMySQL触りだすと
昔と違って今だと、シビアにチューニングできなければつらいだけ
ポテンシャルはMySQLのがまだ高いけど、大体はPostgreSQLに負ける
昔と違って今だと、シビアにチューニングできなければつらいだけ
ポテンシャルはMySQLのがまだ高いけど、大体はPostgreSQLに負ける
でもなんとなくgoogleとかfacebookが使ってるMySQLを使ってしまう。
そりゃシビアにチューニングできる会社だからな
同じく出来るなら使えばいいんじゃね
ホスティングとか自社サービスじゃない系はPostgreSQLかそれベースのものが増えてるからな
同じく出来るなら使えばいいんじゃね
ホスティングとか自社サービスじゃない系はPostgreSQLかそれベースのものが増えてるからな
自力で実装しなきゃなんないシャーディンクを
標準機能とでも思ってるのでは
標準機能とでも思ってるのでは
というか、オラクルがスキあらば金取ろうとして超うざい。
わざわざ会社にまで電話かけてくんなマンカス>日本オラクルの馬鹿女
わざわざ会社にまで電話かけてくんなマンカス>日本オラクルの馬鹿女
>>222
> >>221
> >小さい規模はPostgreSQLで、大規模はMySQL
> それは気のせいだ
元ネタはこれだな。
http://www.slideshare.net/matsunobu/ss-28303485
> >>221
> >小さい規模はPostgreSQLで、大規模はMySQL
> それは気のせいだ
元ネタはこれだな。
http://www.slideshare.net/matsunobu/ss-28303485
今となっての大きな違いはマルチスレッドかマルチコアかぐらいの違いぐらいか。
クラスタリングに関してはMySQLだろう
大規模ってそういう事じゃないの?
大規模ってそういう事じゃないの?
postgresもamazon rdsでもサポート始まったしな
MySQLはオワコン
かといって素直にみんなMariaいくかと言えば
「まてよ」と一度考察が入るのでそうでもない。
オラクルのMySQLつぶしはほとんど成功だな
MySQLはオワコン
かといって素直にみんなMariaいくかと言えば
「まてよ」と一度考察が入るのでそうでもない。
オラクルのMySQLつぶしはほとんど成功だな
>>239
FaceBookが利用してるやり方やDeNAがやってることとか考えると
MySQLじゃないとだめな用途はちゃんとある
PostgreSQLもビッグデータ系で多々使われるようになってるし
クラウドと実は相性が良いということもあるし
どっちもこれからまだまだいける
FaceBookが利用してるやり方やDeNAがやってることとか考えると
MySQLじゃないとだめな用途はちゃんとある
PostgreSQLもビッグデータ系で多々使われるようになってるし
クラウドと実は相性が良いということもあるし
どっちもこれからまだまだいける
>>241
FaceBookの利用は、そのURLに書いてあった内容だよ。
DeNAは
http://www.publickey1.jp/blog/10/nosqlmysqldenamemcached75.html
http://itpro.nikkeibp.co.jp/article/Interview/20110801/363141/
FaceBookの利用は、そのURLに書いてあった内容だよ。
DeNAは
http://www.publickey1.jp/blog/10/nosqlmysqldenamemcached75.html
http://itpro.nikkeibp.co.jp/article/Interview/20110801/363141/
>>242
いや、2010年ころの話をされても。。。。って思った訳っす。
上のスライドの趣旨としては、2000年-2005年くらいの状況として
大規模はMySQLを選んだみたいに言ってるようにみえるから。
いや、2010年ころの話をされても。。。。って思った訳っす。
上のスライドの趣旨としては、2000年-2005年くらいの状況として
大規模はMySQLを選んだみたいに言ってるようにみえるから。
>>242
ついでにいうとFBやGoogleみたいに中身をぐちゃぐちゃに改造して
大規模対応って言われてもなぁみたいな。
中を改変しちまえば、そりゃなんでもできるじゃないという。
MySQLは大規模に向いているという理由が理解できない。
ついでにいうとFBやGoogleみたいに中身をぐちゃぐちゃに改造して
大規模対応って言われてもなぁみたいな。
中を改変しちまえば、そりゃなんでもできるじゃないという。
MySQLは大規模に向いているという理由が理解できない。
>>241
知識は偏ってるね。
まぁ、元 MySQL のサポートエンジニアでその後は WEB系でしか働いてない人だししゃーないかな。
>> 俺もそう思う。大規模の定義がFBとGoogle。この2社以外はコスト的にAWSに敵わないみたいに読める。
>> 実際はそんな簡単じゃないんだけども。
>> データを自社に置くか置かないをコストだけで判断しない業種がたくさんあるわけだが、
>> そういう視点がすっぽり抜けてる。
俺もそう思うが、そういう人は相手にしてない資料なんじゃないかな。
正直、人事系とか外に出すなんてって思っちゃうけど、
今後 AWS 使うのは普通になる世の中が来るのかね。
昔は業務系、今は WEB系で働いてるが、WEB系に関しては、
よっぽどのことがない限りコストでは AWS の RDS のほうが有利だね。
細かなチューニングとか、トラブル時の調査とかしにくいけど、
チューニング出来る人雇うぐらいならスケールアップしたほうが安いっていう。
知識は偏ってるね。
まぁ、元 MySQL のサポートエンジニアでその後は WEB系でしか働いてない人だししゃーないかな。
>> 俺もそう思う。大規模の定義がFBとGoogle。この2社以外はコスト的にAWSに敵わないみたいに読める。
>> 実際はそんな簡単じゃないんだけども。
>> データを自社に置くか置かないをコストだけで判断しない業種がたくさんあるわけだが、
>> そういう視点がすっぽり抜けてる。
俺もそう思うが、そういう人は相手にしてない資料なんじゃないかな。
正直、人事系とか外に出すなんてって思っちゃうけど、
今後 AWS 使うのは普通になる世の中が来るのかね。
昔は業務系、今は WEB系で働いてるが、WEB系に関しては、
よっぽどのことがない限りコストでは AWS の RDS のほうが有利だね。
細かなチューニングとか、トラブル時の調査とかしにくいけど、
チューニング出来る人雇うぐらいならスケールアップしたほうが安いっていう。
>>248
一通り見た。
コネクションプールを使わない場合は
MySQLのがコネクションを貼るコストがスレッドだから安いから速いってことか
複数台構成の場合コネクションプール使うし
1台の場合貼りっぱなしで問題ないから理解が出来なかった
一通り見た。
コネクションプールを使わない場合は
MySQLのがコネクションを貼るコストがスレッドだから安いから速いってことか
複数台構成の場合コネクションプール使うし
1台の場合貼りっぱなしで問題ないから理解が出来なかった
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- MySQL 総合 Part25 (947) - [94%] - 2017/6/18 6:30
- MySQL 総合 Part14 (1001) - [94%] - 2008/11/23 10:17 ☆
- MySQL 総合 Part23 (992) - [94%] - 2013/8/11 17:00
- MySQL 総合 Part22 (1001) - [94%] - 2012/7/10 16:45
- MySQL 総合 Part26 (860) - [94%] - 2023/2/2 9:30
- MySQL 総合 Part21 (1001) - [94%] - 2011/12/25 22:16
- MySQL 総合 Part20 (995) - [94%] - 2011/10/17 4:48
- MySQL 総合 Part12 (1001) - [89%] - 2008/1/30 17:34 ○
- MySQL 総合 Part18 (986) - [89%] - 2011/1/17 15:46
- MySQL 総合 Part13 (996) - [89%] - 2008/6/10 21:02 ☆
- MySQL 総合 Part15 (1001) - [89%] - 2009/4/20 12:15 ☆
- MySQL 総合 Part17 (1001) - [89%] - 2010/6/10 20:47 ○
- MySQL 総合 Part19 (982) - [89%] - 2011/6/9 2:33
- MySQL vs PostgreSQL Part2 (941) - [36%] - 2022/5/26 1:30 ○
トップメニューへ / →のくす牧場書庫について