無知な私に教えてくださいm(_ _)m
Where文でよく使う項目にインデックスを貼っていたのですが
ググったりして探してみるとどうも違うようですが、みんな曖昧な言いまわしで
よくわかりません。
たとえば、PostgreSQLで以下のようなテーブルがあるとします。
---------------------------
SNO NUMERIC(8) [PRIMARY KEY]
NAME VARCHAR(100)
SEX NUMERIC(1) -- 0:男、1:女
---------------------------
SNOは通し番号でPRIMARY KEYなのでインデックスが貼られますが
クエリー発行時に「where SEX = 1 」とよく利用する場合にSEXにはインデックスを
貼るべきなのか貼らないべきなのかが分かりません。
インデックスはどこに貼るべきか?
2006/06/20(火) 11:28:32ID:???
21
2006/06/20(火) 11:31:40ID:??? 試しに二つのテーブルを用意して実験してみました。
--テーブル1
create table test1(
sno serial not null,
name varchar(100),
sex numeric(2),
primary key(sno)
);
--テーブル2
create table test2(
sno serial not null,
name varchar(100),
sex numeric(2),
primary key(sno)
);
create index test2_indexA1
on test2
(sex);
この二つのテーブルにまったく同じデータを10個ほど入れて
・explain select * from test1 where sex = 1 ;
・explain select * from test2 where sex = 1 ;
を実行してみました。
test1のほうは
Seq Scan on test1 (cost=0.00..22.50 rows=5 width=183)
Filter: (sex = 1::numeric)
という結果でした。
test2のほうは
Index Scan using test2_indexa1 on test2 (cost=0.00..17.07 rows=5 width=183)
Index Cond: (sex = 1::numeric)
という結果でした。
データ数も少ないのでコストはあまり変わりませんがusing indexと出てるのでtest2のほうが
インデックスが使われています。ということはやはりよく検索する項目にはインデックスを張るべきなのでしょうか??
--テーブル1
create table test1(
sno serial not null,
name varchar(100),
sex numeric(2),
primary key(sno)
);
--テーブル2
create table test2(
sno serial not null,
name varchar(100),
sex numeric(2),
primary key(sno)
);
create index test2_indexA1
on test2
(sex);
この二つのテーブルにまったく同じデータを10個ほど入れて
・explain select * from test1 where sex = 1 ;
・explain select * from test2 where sex = 1 ;
を実行してみました。
test1のほうは
Seq Scan on test1 (cost=0.00..22.50 rows=5 width=183)
Filter: (sex = 1::numeric)
という結果でした。
test2のほうは
Index Scan using test2_indexa1 on test2 (cost=0.00..17.07 rows=5 width=183)
Index Cond: (sex = 1::numeric)
という結果でした。
データ数も少ないのでコストはあまり変わりませんがusing indexと出てるのでtest2のほうが
インデックスが使われています。ということはやはりよく検索する項目にはインデックスを張るべきなのでしょうか??
2006/06/20(火) 12:19:13ID:???
( ゚д゚)
_(__つ/ ̄ ̄ ̄/_
\/ /
_, ._
( ゚ Д゚)
_(__つ/ ̄ ̄ ̄/_
\/ /
( ゚д゚)
_(__つ/ ̄ ̄ ̄/_
\/ /
_, ._
(;゚ Д゚)
_(__つ/ ̄ ̄ ̄/_
\/ /
(゚д゚ )
_(__つ/ ̄ ̄ ̄/_
\/ /
(д゚ )
_(__つ/ ̄ ̄ ̄/_
\/ /
4NAME IS NULL
2006/06/20(火) 12:53:47ID:QOvjXAXI 判らなきゃ聞かずに勉強しろ。
このあたりはSQL知ってるレベルから、DB使えるってレベルへの大事な部分だ。
このあたりはSQL知ってるレベルから、DB使えるってレベルへの大事な部分だ。
5U ◆CZtFsGiu0c
2006/06/20(火) 16:23:53ID:??? Postgresってコストベースでしょ?
たかだかデータ10件でインデックススキャンを選択するオプティマイザ
って信用できるのだろうか。
それはともかく、
>クエリー発行時に「where SEX = 1 」とよく利用する場合にSEXにはインデックスを
貼るべきなのか貼らないべきなのかが分かりません。
SEXって男性、女性(+NULL?)しかないわけでしょ? そのフィールドに
インデックス貼って本当に効率がどこまで上がるのかな? それから、
>>4も書いているとおりそんな単純な問題ではないから、基礎から
勉強しましょう。
#まあプランを検証しているだけマシか…
たかだかデータ10件でインデックススキャンを選択するオプティマイザ
って信用できるのだろうか。
それはともかく、
>クエリー発行時に「where SEX = 1 」とよく利用する場合にSEXにはインデックスを
貼るべきなのか貼らないべきなのかが分かりません。
SEXって男性、女性(+NULL?)しかないわけでしょ? そのフィールドに
インデックス貼って本当に効率がどこまで上がるのかな? それから、
>>4も書いているとおりそんな単純な問題ではないから、基礎から
勉強しましょう。
#まあプランを検証しているだけマシか…
2006/06/21(水) 15:20:04ID:???
いや、単発質問スレ立ててる時点で勉強しても許しがたい
2006/06/22(木) 09:36:01ID:???
お尻に張ってください
8NAME IS NULL
2006/06/22(木) 13:05:59ID:IC52MLFC 尻でもSEXでもいいが、張って高速化できるんなら張れば。
ちなみにDBMSやindexの種類にもよるが、値の分布が少ない場合はあんまり効果無いぞ。
場合によっちゃ、張っても全スキャンの方が速いと判断して使ってくれない場合もある。
ちなみにDBMSやindexの種類にもよるが、値の分布が少ない場合はあんまり効果無いぞ。
場合によっちゃ、張っても全スキャンの方が速いと判断して使ってくれない場合もある。
2006/06/22(木) 17:17:28ID:???
昔は、使ってくれないだけならまだしも、使った上に全件より遅くなったりしたもんだ。
今でもそういうDBMSあるだろね。
今でもそういうDBMSあるだろね。
10NAME IS NULL
2006/06/25(日) 16:34:46ID:xGXxj73z SEXの値のデータ分布が 1 対 1 なら、あまり意味が無い
男(0):女(1)=9:1なんかで SEX = 1 という検索を行う必要があれば、インデックスを張る価値があるよ
この場合、SEX = 0 の検索では効果はないけどね
と経験上の話を書いたけど、残念ながら Oracle(たしか8iくらい?) は SEX = 1 のような検索でも
インデックスは使ってくれなかった。
入力された検索条件をユーザープログラム側で解析して、SEX = 1 となるような
検索になるときは、ヒントでインデックスを使うように指示した記憶がある。
ある特殊な検索だったんだけど、結果を出すのに数十秒かかってた処理が
一瞬で返るようになってビックリした。
結局、その検索条件でデータをガッツリ絞り込めることが保証されるなら
インデックスを張るべきだね。
男(0):女(1)=9:1なんかで SEX = 1 という検索を行う必要があれば、インデックスを張る価値があるよ
この場合、SEX = 0 の検索では効果はないけどね
と経験上の話を書いたけど、残念ながら Oracle(たしか8iくらい?) は SEX = 1 のような検索でも
インデックスは使ってくれなかった。
入力された検索条件をユーザープログラム側で解析して、SEX = 1 となるような
検索になるときは、ヒントでインデックスを使うように指示した記憶がある。
ある特殊な検索だったんだけど、結果を出すのに数十秒かかってた処理が
一瞬で返るようになってビックリした。
結局、その検索条件でデータをガッツリ絞り込めることが保証されるなら
インデックスを張るべきだね。
2006/06/25(日) 16:43:07ID:???
まぁ、列のカーディナリティが低いなら、ビットマップインデックスはるか、
パーティションテーブル使った方がいいかもな
パーティションテーブル使った方がいいかもな
2006/06/25(日) 20:11:03ID:???
男と女のデータの数が1:1でも
インデックスを使うとデータは半分になるわけだが。
インデックスを使うとデータは半分になるわけだが。
2006/06/26(月) 00:26:19ID:???
2006/07/01(土) 23:02:23ID:???
カーディナリティが低い場合はインデックスを忘れろ。
15NAME IS NULL
2006/07/06(木) 10:21:52ID:vCGruU6t > 100万件登録されているテーブルで50万件をインデックスにより特定して全スキャンさせるのか?
100万件全スキャンさせるのよりも、50万件全スキャンさせるほうが
半分ですむ。
100万件全スキャンさせるのよりも、50万件全スキャンさせるほうが
半分ですむ。
16NAME IS NULL
2006/07/06(木) 12:56:01ID:4t2wzNRO17NAME IS NULL
2006/07/06(木) 16:47:53ID:U1S8L1hg 多くの場合、インデックスは昇順でならんでいる。
だから最初と最後の位置を特定すれば、あとは舐めるだけと変わらない。
データが少ない場合は、最初と最後の位置を特定するコストに相殺されるが、
データが多くなると、スキャンする範囲が狭くなるので有効。
だから最初と最後の位置を特定すれば、あとは舐めるだけと変わらない。
データが少ない場合は、最初と最後の位置を特定するコストに相殺されるが、
データが多くなると、スキャンする範囲が狭くなるので有効。
2006/07/06(木) 22:59:18ID:???
それはindexのリーフに必要なデータが揃っている場合だけな。
select SEX from TABLE where SEX=1
select SEX from TABLE where SEX=1
19NAME IS NULL
2006/07/07(金) 09:08:47ID:+t31RxJ2 だーね、SQL鯖でいうクラスタ化インデックスって場合。
2006/07/09(日) 16:29:41ID:???
せめて column 名は GENDER にしないか。
2006/07/09(日) 20:28:12ID:???
221
2006/07/25(火) 16:04:37ID:??? 皆さん!レスありがとうございます。
B-TREEの基礎から勉強してきました。インデックスとは何かが良くわかりました。
奥が深くて回答しづらいのも良くわかりました。こんなスレたててすみませんでした。
B-TREEの基礎から勉強してきました。インデックスとは何かが良くわかりました。
奥が深くて回答しづらいのも良くわかりました。こんなスレたててすみませんでした。
23NAME IS NULL
2007/01/27(土) 07:42:17ID:8mHye8uN オカマの思う壺
ttp://megabbs.com/pickles/index.html
ttp://megabbs.com/pickles/index.html
24NAME IS NULL
2007/01/27(土) 10:46:22ID:O+RfWf9V2007/02/01(木) 12:23:54ID:???
なにげに良スレ化。
26NAME IS NULL
2007/02/12(月) 12:58:20ID:/s74tiRC ほしゅ
2007/02/14(水) 09:39:15ID:???
インサートとかセックスとか、童貞にはハァハァ対象だな。
2008/10/30(木) 11:31:29ID:???
インデックスたん(;´Д`)ハァハァ
2008/11/11(火) 22:48:21ID:???
30NAME IS NULL
2009/04/06(月) 09:50:39ID:gtB4cOSs ソートで使う列(値はバラバラ)に
インデックスは効果ありますか?
インデックスは効果ありますか?
31NAME IS NULL
2009/04/11(土) 20:01:58ID:691PehwU32NAME IS NULL
2009/04/11(土) 20:10:45ID:691PehwU >>10
Oracle8iのオプティマイザは糞だからな。
統計情報を採取した後に、急激にパフォーマンスが悪くなるなんてこともあった。
現在のバージョンのオプティマイザは優秀になったが。
Oracle10gや11gは、カーディナリティが低いSEXのインデックスでも使用してくれるだろう。
だが1つだけ注意しないといけないことがあってな。
それはSEXの抽出条件にバインド変数を使用してしまうと、
女で抽出する場合と男で抽出する場合でも、同じ実行計画を組み立ててしまうということ。
だから、オマイの案のようなそういう特殊条件をやる場合は、
SEXの抽出条件にバインド変数を利用しないようにしないと問題が発生するだろう。
Oracle8iのオプティマイザは糞だからな。
統計情報を採取した後に、急激にパフォーマンスが悪くなるなんてこともあった。
現在のバージョンのオプティマイザは優秀になったが。
Oracle10gや11gは、カーディナリティが低いSEXのインデックスでも使用してくれるだろう。
だが1つだけ注意しないといけないことがあってな。
それはSEXの抽出条件にバインド変数を使用してしまうと、
女で抽出する場合と男で抽出する場合でも、同じ実行計画を組み立ててしまうということ。
だから、オマイの案のようなそういう特殊条件をやる場合は、
SEXの抽出条件にバインド変数を利用しないようにしないと問題が発生するだろう。
33NAME IS NULL
2009/04/11(土) 20:13:26ID:691PehwU やべ、3年前のレスに返信してしもうたわw
ハズカシー (/ω\)
ハズカシー (/ω\)
2009/04/13(月) 13:05:07ID:???
x‐‐―…―‐--x
人人 \
(ー:‐:‐:‐:‐:‐:‐:‐:i ヽ
マ (_________! !
ジ (ノへハノハノィi::i::ハ !
で (r心` r心ヘ::l::!|
っ(弋ソ 弋ソ}ノ::N.|
!? (:::ー''/\ー'::Y:::| て
::ハ⌒i u \/ .イ:|:| (
`ヽ::i:|\` 7{ ノ:|::!:! |
人人 \
(ー:‐:‐:‐:‐:‐:‐:‐:i ヽ
マ (_________! !
ジ (ノへハノハノィi::i::ハ !
で (r心` r心ヘ::l::!|
っ(弋ソ 弋ソ}ノ::N.|
!? (:::ー''/\ー'::Y:::| て
::ハ⌒i u \/ .イ:|:| (
`ヽ::i:|\` 7{ ノ:|::!:! |
35NAME IS NULL
2009/06/17(水) 23:31:00ID:fu0ZnfDa ビットマップはテーブルの目的によっちゃ使わないほうが良い事もある。
トランザクション系なら避けたほうがいい。
おいらは本番で痛い目を見た......
トランザクション系なら避けたほうがいい。
おいらは本番で痛い目を見た......
36NAME IS NULL
2009/08/27(木) 00:10:55ID:vGxTqY7s MySQL5.x系を使っているのですが、どうも件数が遅くなりそうで心配です。
簡単に言うと、名簿を作っているのですが、
'部' '課' '係' というカラムで個人情報があって、それに対して、
( 部1 = 部2 and 課1 = null and 係1 = null ) or
( 部1 = 部2 and 課1 = 課2 and 係1 = null ) or
( 部1 = 部2 and 課1 = 課2 and 係1 = 課2l ) or
というマッチングを頻繁にやってます。
この場合、部、課、係の複合インデックスのほかに、部、課、係それぞれの
インデックスを作ることは効果あるでしょうか?
簡単に言うと、名簿を作っているのですが、
'部' '課' '係' というカラムで個人情報があって、それに対して、
( 部1 = 部2 and 課1 = null and 係1 = null ) or
( 部1 = 部2 and 課1 = 課2 and 係1 = null ) or
( 部1 = 部2 and 課1 = 課2 and 係1 = 課2l ) or
というマッチングを頻繁にやってます。
この場合、部、課、係の複合インデックスのほかに、部、課、係それぞれの
インデックスを作ることは効果あるでしょうか?
2009/08/27(木) 14:28:08ID:???
エンジンによっても違うらしいから
explainしてみるか実測してみたら?
explainしてみるか実測してみたら?
2009/08/27(木) 20:54:57ID:???
やっぱり個別インデックスをつけた方が速かったです。
エンジンは、ISAMを使っています。
更新時に重くなければ、このままインデックスをつけて
やってみます。混雑時じゃないと実測できないけど・・・。
エンジンは、ISAMを使っています。
更新時に重くなければ、このままインデックスをつけて
やってみます。混雑時じゃないと実測できないけど・・・。
2009/12/01(火) 01:36:35ID:???
_.. -――- ._
./ ,―――‐- .._` .、
x / ./ / / ``\. +
/_.. ィ7T.フ厂 ̄`フi ‐- ._ |〉 x
.x !  ̄フ/l/_×// |ハハl .ト、 x
|! / | /|,イ._T_i` .r≦lハ!|`` +
ll/_ .| | |'弋..!ノ i'+!l |
/ ミr`! / l |' ' ' ,‐- ..__゙ー' .!l .|
ト、ソ .! ./ .,!l .ト、 l `,! .ハ.!
/ll\ `テヽ、 /_,| |l: > .ヽ.. ィ <l l|
./' l|/l. >' / /\. | | \ \ー'/ ./ ,,;:`:;'゙"r;:゙c
' l|l l/ ./ / | | _\_×_/.ィ'...二二二l ヽ
| ヽ./ / /|.|i彡_ \\
| // ./ .l|| ´  ̄,「 ̄ 「 li ̄二ニ -'´ ヽ.
└――'"l// .|! / / ! .| |' |l //
/ __l_/_/__.|__|__l_`_ー_'_____./
./ ,―――‐- .._` .、
x / ./ / / ``\. +
/_.. ィ7T.フ厂 ̄`フi ‐- ._ |〉 x
.x !  ̄フ/l/_×// |ハハl .ト、 x
|! / | /|,イ._T_i` .r≦lハ!|`` +
ll/_ .| | |'弋..!ノ i'+!l |
/ ミr`! / l |' ' ' ,‐- ..__゙ー' .!l .|
ト、ソ .! ./ .,!l .ト、 l `,! .ハ.!
/ll\ `テヽ、 /_,| |l: > .ヽ.. ィ <l l|
./' l|/l. >' / /\. | | \ \ー'/ ./ ,,;:`:;'゙"r;:゙c
' l|l l/ ./ / | | _\_×_/.ィ'...二二二l ヽ
| ヽ./ / /|.|i彡_ \\
| // ./ .l|| ´  ̄,「 ̄ 「 li ̄二ニ -'´ ヽ.
└――'"l// .|! / / ! .| |' |l //
/ __l_/_/__.|__|__l_`_ー_'_____./
40南沢木綿子 ◆qdIdLOElrVy2
2010/09/08(水) 10:12:20ID:??? ∧,,,∧
( ・∀・) ほー それで
( : )
し─J
( ・∀・) ほー それで
( : )
し─J
42NAME IS NULL
2013/06/12(水) 19:30:30.22ID:dhCfeG4A お!今話題のスレタイ!
2013/06/21(金) 18:05:24.95ID:???
最初か最後のページだな。
2013/08/11(日) NY:AN:NY.ANID:???
痛いとこにでも貼っとけば良いんでない?
2015/01/03(土) 03:54:34.12ID:???
第1章 赤・緑・青編 1巻〜3巻
第2章 イエロー編 4巻〜7巻
第3章 金・銀・クリスタル編 8巻〜15巻
第4章 ルビー・サファイア編 15巻〜22巻
第5章 ファイアレッド・リーフグリーン編 22巻〜26巻
第6章 エメラルド編 26巻〜29巻
第7章 ダイヤモンド・パール編 30巻〜38巻
第8章 プラチナ編 38巻〜40巻
第9章 ハートゴールド・ソウルシルバー編 41巻〜43巻
第10章 ブラック・ホワイト編 43巻〜51巻
第11章 ブラック2・ホワイト2編 52巻〜
第12章 エックス・ワイ編 XY編2巻〜
第2章 イエロー編 4巻〜7巻
第3章 金・銀・クリスタル編 8巻〜15巻
第4章 ルビー・サファイア編 15巻〜22巻
第5章 ファイアレッド・リーフグリーン編 22巻〜26巻
第6章 エメラルド編 26巻〜29巻
第7章 ダイヤモンド・パール編 30巻〜38巻
第8章 プラチナ編 38巻〜40巻
第9章 ハートゴールド・ソウルシルバー編 41巻〜43巻
第10章 ブラック・ホワイト編 43巻〜51巻
第11章 ブラック2・ホワイト2編 52巻〜
第12章 エックス・ワイ編 XY編2巻〜
46NAME IS NULL
2015/01/23(金) 00:48:08.85ID:458VLz89 腰
2015/02/01(日) 16:41:47.17ID:???
あそこ。
2015/02/10(火) 00:16:06.77ID:???
50NAME IS NULL
2015/09/19(土) 02:46:04.98ID:atvU/TBs >>1
インデックスは作るもの。
インデックスは作るもの。
51ギンコ ◆BonGinkoCc
2015/12/14(月) 20:18:32.99ID:??? インデックスは、DATで言うと、スタートID、DVDやBDでいうとチャプターに該当する。
スタートIDやチャプターを任意の場所に振っておくと、録音後や録画後に後から簡単に探し出せますよね。
インデックスを降っていないファイルの場合は、シーケンシャルアクセスを行い、目的のデータが見つかるまで
順番にたどり着くしか方法が無い。
スタートIDやチャプターを任意の場所に振っておくと、録音後や録画後に後から簡単に探し出せますよね。
インデックスを降っていないファイルの場合は、シーケンシャルアクセスを行い、目的のデータが見つかるまで
順番にたどり着くしか方法が無い。
52NAME IS NULL
2015/12/14(月) 23:00:31.65ID:3cSRdEx7 >>51
かなり違うが?
かなり違うが?
53NAME IS NULL
2017/12/29(金) 12:04:37.50ID:dtNZwIie 誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
95548V17E0
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
95548V17E0
2023/01/21(土) 15:48:31.36ID:???
規制解除されてる
2023/07/08(土) 18:50:29.35ID:???
( '∇')y-。ο ○ アハハハハ
レスを投稿する
ニュース
- 【埼玉】八潮市の交差点で道路が陥没しトラック落下、穴が直径40m以上に拡大…運転手救出へスロープ設置工事始まる★61 [Ailuropoda melanoleuca★]
- 【埼玉】八潮市の交差点で道路が陥没しトラック落下、穴が直径40m以上に拡大…運転手救出へスロープ設置工事始まる★62 [Ailuropoda melanoleuca★]
- 中居正広とX子さんを結び付けた「BBQ」で何があったのか 同席した「ヒロミ」が改めて明かした“真相” ★2 [ひかり★]
- 渡邊渚さんSNS更新「生きることを投げ出したくなる日もあった だけど私は…」初エッセイの帯を紹介 ファン「心から頑張って欲しい」 [muffin★]
- 小林よしのり「週刊文春こそ、悪の権化であり、社員を一貫して守った その一点だけはフジテレビの役員の立派な態度だった」 [Anonymous★]
- 【🚺】なぜ女性トイレだけ行列? 706カ所調べてみたら…見えた男女格差 「女性は衣類を上げ下げする時間が必要」 [ぐれ★]
- 【ジャップ悲報】赤ちゃんの抱っこ紐が勝手に外される事案が全国で多発 [747976479]
- ワイの半生地獄過ぎてまじで死にたいwwwwwwwww
- JKです質問全部答えます!! 3
- 渡邊渚さん、あのとき殺されていればよかった、死んだ方が楽だと思えるレベルのことを中居にされていた… [126042664]
- 【緊急】渡辺渚さん、ガチでとんでもないことをされた模様WWWWWWWWWWWWWWWWWWWWWW
- 三ヶ月部屋に引きこもってる やることは掲示板で人の悪口かオナニー [771869708]