SQLなら俺に訊け [無断転載禁止]©2ch.net (457レス)
1-

1: 2017/07/14(金)07:40 ID:HFjsarQi(1) AAS
さあ
374: 01/19(日)02:17 ID:9/Z57kyd(1) AAS
サブクエリの有無ごときで議論になるの笑ってしまうなw
どんなちっこいアプリなんだ?電卓とか?
375: 01/19(日)06:33 ID:ugzsMDEi(1) AAS
1週間も経って突然貶し始める方が笑ってしまうわ
376: 01/19(日)09:51 ID:pfUoPKo5(1) AAS
どこの句のどういう使い方をするサブクエリなのか書いてくれないと、サブクエリを使うべきなのか、そうでないか答えようがない。
377: 警備員[Lv.1][新芽] 01/19(日)13:34 ID:bMoMF2/G(1) AAS
SQLを複数回に分割して発行すると、その間DBに更新がないことを担保する必要がありますか?
378: 01/19(日)16:06 ID:vo12PcwL(1) AAS
トランザクションを指定すれば?
379: 01/19(日)16:20 ID:MoFiVYUu(1) AAS
そこはSQLを複数回に分割して発行するかどうかよりも上位のレベルで
トランザクションや同時実行制御の観点から設計しておくべき事項
担保する必要性の有無は分割しようがしまいが変わらない
380: 警備員[Lv.4][新芽] 01/19(日)18:28 ID:T6GaQrgY(1/2) AAS
やはりトランザクションですね
ありがとうございます!!
381: 警備員[Lv.4][新芽] 01/19(日)18:29 ID:T6GaQrgY(2/2) AAS
ちなみに、サブクエリとするか分割するかのレスに乗っかって、でした
382: 01/20(月)11:39 ID:7SyPOdKK(1) AAS
サブクエリを使わないで、一旦チンポテーブルに書き出す方式があったよね
あれなんだっけか
383
(3): 警備員[Lv.1][新芽] 01/20(月)18:23 ID:O4abJDGp(1/3) AAS
次の3つのフィールドで構成される複合主キーがあり
(PK1, PK2, PK3)
検索キーとしてPK2とPK3だけをよく用いるとき、主キー以外にもインデックス(PK2, PK3)を作成すべきですか?
384: 01/20(月)18:55 ID:kikzz/Vc(1/2) AAS
キーのバラつき具合やオプティマイザの機能にもよるから一概に不要とも作成すべきとも言えない
385: 01/20(月)18:55 ID:kikzz/Vc(2/2) AAS
実際のクエリプランを見て判断
386: 警備員[Lv.3][新芽] 01/20(月)19:12 ID:O4abJDGp(2/3) AAS
ありがとうございます>>383です
ちなみにaccessです
387: 警備員[Lv.3][新芽] 01/20(月)19:14 ID:O4abJDGp(3/3) AAS
>>3々3です
accessで複合主キーを設定したとき、インデックスは自動で付与されるでしょうか
388
(1): 01/21(火)08:53 ID:9Kz0tqcV(1) AAS
インデックスじゃない主キーってなんだ……。
389
(3): 警備員[Lv.5][新芽] 01/21(火)09:13 ID:X3sBvw4I(1) AAS
>>388
調べてみるとそうみたいなんだけど(主キーにはインデックスが張られる)、単一主キーだと、該当キーにRequired、Uniqueなインデックスが作成されるけど、複合主キーでは個々のフィールドに個別にはインデックスが作成されてなくて
それがどういうことか(インデックスが張られているか)分からなくて
分かりにくくてごめんね
390
(1): 01/21(火)11:15 ID:+xYYoS0+(1/2) AAS
>>389
DBの構成上、主キーであれば最低限1つのインデックスは張られる
それはPK1,PK2,PK3全部揃ったときにB木を辿れればいいだけなので、6(=3P3)通りのどれかだが、
何もなければ PK1->PK2->PK3 の1つのインデックスになる
この場合、PK1,PK2 のセットならインデックスが使えるが、今回のように PK2, Pk3 のセットだと使えない
これはクエリプランを見れば判断出来る

SQLiteだとこのケースでは上記の通り
省3
391: 01/21(火)11:23 ID:+xYYoS0+(2/2) AAS
>>389
> 単一主キーだと、該当キーにRequired、Uniqueなインデックスが作成されるけど、複合主キーでは個々のフィールドに個別にはインデックスが作成されてなくて
これは少し勘違いしてる
インデックスはあくまでB木であって、個々のフィールドやカラムとは全く別物
インデックスが当たってるかは、クエリプランで確認すべき事
392
(1): 警備員[Lv.7][新芽] 01/21(火)13:20 ID:j6Q/IyUA(1/4) AAS
>>389です
ありがとうございます

(以下Accessです)
新たにテーブルに、主キー(PK1,PK2,PK3)を作成した段階で数万件のレコードを入れ、仮に(PK1,PK3)をキーとしてSELECTで抽出をするとめちゃくちゃ遅い…(1)
上のテーブルの主キーの個々のフィールド(3つ)にインデックスを設定して(1)と同じ条件の抽出をするとかなり速い…(2)
(2)のインデックスを削除して主キーと同じフィールドに複合インデックスを設定するともっと速い…(3)

(1):(2):(3)=65:1.5:1
省3
393
(1): 警備員[Lv.7][新芽] 01/21(火)13:21 ID:j6Q/IyUA(2/4) AAS
実行計画の出し方は調べてみます
多分見方が分かりませんがw
394
(1): 01/21(火)16:54 ID:c07BxmkO(1) AAS
>>392
(1)で設定した複合主キーと
(3)で設定した複合インデックスとで
インデックスを構成するカラムの順番は本当に同じ?
395: 警備員[Lv.8][新芽] 01/21(火)17:55 ID:j6Q/IyUA(3/4) AAS
>>394
すみません、ちょっと投稿内容に誤りがありました

(1)の複合主キーと、(3)の複合インデックスをまったく同じフィールド、個数、順序とすると、(1)と同じように、複合主キーのみでインデックスを設定しないときの同じように65倍の時間が掛かりました
デフォルトで設定されたインデックスと一致しているので当然なのかもしれません

先ほどの(3)の結果としてを得たのは、試行錯誤して複合インデックスから検索キーとしないフィールドを削除したもので、複合主キーのフィールド数より2つ少ないです
後出しになりすみません

データの内容によっても結果は変わるでしょうし、オレ環なので諦めるしかないかなと
396
(1): 警備員[Lv.8][新芽] 01/21(火)18:09 ID:j6Q/IyUA(4/4) AAS
簡単のため、当初複合主キーのフィールド数を3としました
397
(1): 01/22(水)00:08 ID:l3OLrM1a(1) AAS
{PK1,PK2,PK3}で複合キーが定義されてる場合
検索条件が{PK1}か{PK1, PK2}か{PK1, PK2, PK3}であればどのDBMSでも大半のケースでインデックスが使われる
検索条件が{PK1, PK3}の場合はPK1のselectivity次第でインデックスが使われるものがある
検索条件が{PK2, PK3}のように一番左のカラムが含まれない場合はindex skip scanという機能が実装されてなければインデックスは使われない(Accessにはたぶん実装されてない)

他のクエリとの兼ね合いで複合主キーを構成するカラムの順序を変更できないということであれば該当クエリ用に複合インデックスを追加するのは妥当
398: 01/22(水)00:28 ID:VcBzYOin(1/7) AAS
>>396
というか何がやりたいのか不明な事になってるが、

> 検索キーとしてPK2とPK3だけをよく用いるとき、主キー以外にもインデックス(PK2, PK3)を作成すべきですか?
であれば遅い(=インデックスがない)と分かったのだからインデックス作ればいいだけでは

>>393
> 多分見方が分かりませんがw
見方なんて分かる必要なくて、
省8
399
(1): 警備員[Lv.3][新芽] 01/22(水)01:45 ID:x9n06qn/(1/2) AAS
>>390
>>397
ありがとうございます
最左のカラムを検索キーとするかがポイントなんですね

当初は>>390での指摘がピンときていませんでした
合間のレスで「仮に(PK1,PK3)で検索し」は迂闊でした
いまは手元に試験用のコードがありませんが、最左のカラムを含んでいなかったと思います
省1
400: 01/22(水)01:53 ID:IIgBVdb4(1) AAS
そもそもACCESSのクエリプラントとか、取得大変だがな
401: 01/22(水)05:04 ID:xghKhcgN(1) AAS
ACCESSにクエリプランなんてあるん?w

ファイルで配布できる必要があるとかじゃなければ、MS SQL Expressなり使った方がやりやすくない?
昔と違ってGUIツールも今は無料配布になってるし。
402
(2): 01/22(水)07:08 ID:VcBzYOin(2/7) AAS
>>399
> 最左のカラムを検索キーとするかがポイントなんですね
違う。というか理由を理解ではなく結果を暗記しようとする辺り、文系馬鹿の匂いがするが、
とにかく、「B木」でググって記事を読め
現在のプログラミングでは基本で、そこそこ初心者が記事を書くネタになってるから、いくらでも出てくる
そしてVBAにもハッシュはあるだろ。ググるとScripting.Dictionaryと出てくるが、中身は同様にB木のはずだから、
何か知らんが速いという事で済まさず、この機会にちゃんと理解しろ
省4
403
(1): 警備員[Lv.5][新芽] 01/22(水)09:37 ID:x9n06qn/(2/2) AAS
>>402
ありがとうございます
B木の「B」はBinaryでなくBalanceだったのですね
B木の深さは複合キーの個数で一定となるツリーなんですね
二分木をイメージして「??」でしたが、B木の構造がイメージできればインデックスの効果が得られるか否かが分かりやすいと思いました
404: 01/22(水)10:44 ID:VcBzYOin(3/7) AAS
>>403
> 二分木をイメージして「??」でしたが
いやそういう問題じゃない
というか相変わらずインデックスが何かさっぱり分かってないようだが、単なるリーフへの探索手段だぞ

実際はこんなキーの分け方はあり得ないが、馬鹿でも分かるように敢えて例とすると、
お前が名詞を1,000枚持ってて、あいうえお順に格納して保管してるとする
これは主キーが複合キーの{PK1:苗字1文字目, PK2:苗字2文字目以降, PK3:名前}として、
省9
405
(3): 警備員[Lv.7][新芽] 01/22(水)10:58 ID:ZVwqoD6m(1/3) AAS
B木については知らなかったが、今回の複合インデックスの件について二分木は論外だとは分かっています

ちなみに、>>402ハッシュの中身がB木というのは自分の認識と異なります

字面でうまく伝わらない部分はあったと思いますが、B木を知ることができ(あえて理解とは言わない)よかったです
ありがとうございました
406: 01/22(水)11:07 ID:s+SsM2Gu(1) AAS
中途半端な知識で間違ったことばっかり書いてるのに
人を馬鹿する自称バカではない理系おじさんは少し自重したほうがいい
407
(1): 警備員[Lv.7][新芽] 01/22(水)11:27 ID:ZVwqoD6m(2/3) AAS
>>405
x ハッシュの中身が
o Scripting.Dictionaryの中身が
文脈から分かったかもしれませんが
408: 01/22(水)11:27 ID:VcBzYOin(4/7) AAS
>>405
> 今回の複合インデックスの件について二分木は論外だとは分かっています
いやそうじゃねえ
そもそも論外でもないし、インデックスが二分木でも問題ないし、この場合には二分木もB木の一種だよ
B木とは深さ方向が一定になるように調節されてるものの呼称であり、実際は二分木が多数だろうし

まあ君に理解する気がないのは分かったし、実際に理解しなくても済む人達も大勢居るのも事実
ただプログラマならどのみちいつか引っかかるから、この機会にちゃんと理解しといた方が得だぞという話
省1
409
(1): 01/22(水)11:42 ID:a9tNcWhf(1) AAS
>B木とは深さ方向が一定になるように調節されてるものの呼称であり、実際は二分木が多数だろうし
君が論外
410
(1): 01/22(水)12:42 ID:VcBzYOin(5/7) AAS
>>407,409
そうじゃない、というかそこは問題ではない

というのが分からないのが問題なのだろうが、君は全てを「具象」で捉えて「暗記」してるだけだろ、これは典型的な文系のやり方
本来は「抽象」で捉えて「理解」しないといけない項目
「B木」も「二分木」も(昔ながらのハッシュ関数を使った)「ハッシュ」も別物ではなくて、
同一の物を分類してるだけ、しかも直交もしてない

話を戻すと、問題は、
省19
411: 01/22(水)12:49 ID:VcBzYOin(6/7) AAS
>>410訂正
× 同一の物
○ 同種の物
無駄に絡まれそうなので念のため

まあ俺がどう論外である事を証明したところで、
君がインデックスを理解する事には繋がらないよ
君は努力の方向を間違ってる
省1
412: 01/22(水)13:23 ID:0peR6PAs(1) AAS
どんなにアスペな言い訳しようが君がバカだという事実に変わりはないよ
413
(1): 警備員[Lv.8][新芽] 01/22(水)13:46 ID:ZVwqoD6m(3/3) AAS
>>405です

途中、どうも複合主キーの検索が遅く、複合主キーかフィールドを2つ削除して
と書きましたが、少し理解するうちに、フィールドを削除せずとも順序を入れ替えることで高速化したこと
また、複合主キーの最左から順に一連の(部分)フィールドで検索できない場合は、別途インデックスを設定することで効果が得られることを確認しました

理解不足は否めませんが、実用上問題がないレベルとなったので、これでよしとします
ありがとうございました
414: 01/22(水)18:46 ID:VcBzYOin(7/7) AAS
>>413
> 複合主キーの最左から順に一連の(部分)フィールドで検索できない場合は、別途インデックスを設定することで効果が得られることを確認しました
当たり前、というかDBの使い方の初段階で説明/理解すべき事柄

> 途中、どうも複合主キーの検索が遅く、複合主キーかフィールドを2つ削除して
> と書きましたが、少し理解するうちに、フィールドを削除せずとも順序を入れ替えることで高速化したこと
そうじゃない
ひととおり設計を理解した上で弄くり回して理解を深めるのなら身に付くが、
省16
415: 01/22(水)21:30 ID:o3lkJXbH(1) AAS
おっさん、文章が長いな。もっと簡潔に書きなさい。あなたの文章にインデックス貼ってクエリもチューニングした方が良いぞ
416: 01/22(水)23:15 ID:J/9pPL5e(1/2) AAS
絵に書いたような老害だなw
417: 01/22(水)23:17 ID:J/9pPL5e(2/2) AAS
ありゃ「描いた」だぞと老害に指摘されそうだなw
418: 01/22(水)23:29 ID:I1bb5L41(1) AAS
老害でも技術力があれば匿名掲示板では役立つけどどう見てもないから救いようがない

絶対干されてるタイプ
419: 01/23(木)19:03 ID:0iiPrNry(1) AAS
どうでもいいけど、制約とインデックスを同一として扱ってるのがモヤるわ
ユニーク制約と主キー制約をインデックスで処理しないDBMSはみたことないとしても
420: 01/23(木)19:56 ID:hJ60cV1T(1) AAS
お前の方が色々混同してそうだが
421: 警備員[Lv.1][新芽] 01/23(木)23:23 ID:5wOSbPSv(1) AAS
さ…さすが〜!
し…知らなかった〜!
す…すごーい!
せ…センスい〜ぃ!
そ…そうなんだ〜!
(「合コンさしすせそ」より)
422: 01/23(木)23:29 ID:rNgwBkvb(1) AAS
制約の話で思い出したがAccessの場合は
foreign key制約を設定すればインデックスが自動で出来たはず

(PK1, PK2, PK3)で構成される複合主キーがあって
検索キーとして(PK2, PK3)を利用したいということなら
PK1と(PK2, PK3)は違う親テーブルから主キーを引き継いでるんだろうから
そこにインデックスを張らないという選択はほぼ無いな
423: 01/24(金)04:28 ID:agkokgy5(1) AAS
383以降を見る限り、そんな高級な話ではなく、まるっきり分かってなかっただけだろ
そして(PK2,PK3,PK1)と出来なかった理由の推定なら、そこは(PK1,PK2)とPK3とくくるべき
424: 01/24(金)11:19 ID:SzuokRLj(1) AAS
分かってないのになぜ無理して絡もうとするのが
425
(4): 02/03(月)18:36 ID:hEyRnoXc(1) AAS
PostgreSQLを使っているのですが、

更新前のデータも参照したいので、
更新処理を、元のデータに変更を加えたデータを追記し、更新元のデータに最新ではないフラグを付ける形でやっています。

新しくカラムを追加したのですが、更新処理の変更を忘れて、更新すると新しいカラムがデフォルト値に戻されてしまうバグを作ってしまいました。

既存の行をコピーして、primary keyと変更したいカラムだけ変更する方法ってありませんか?
426: 02/03(月)23:14 ID:k1KW9LUA(1) AAS
>>425
>既存の行をコピーして、primary keyと変更したいカラムだけ変更する方法ってありませんか?
この質問はバグにより作成されたデータの復旧作業方法として質問してる?
それとも一般的にそういう方法ないかということ?
あるいはカラム追加やカラム名の変更があっても更新処理のSQLを修正しなくてもいいようにする方法を聞いてる?

>更新前のデータも参照したいので、
ここで言いってる”参照”は外部キーとして他のテーブルから参照するという意味?
省1
427: 02/06(木)00:29 ID:4njYbkok(1) AAS
>>425
あるよ
selectしたものを使ってupdateすればいい
428: 02/07(金)21:07 ID:lNWVt+S0(1/2) AAS
>>425
トリガーというものがあります
429: 02/07(金)21:08 ID:lNWVt+S0(2/2) AAS
>>425
外部リンク[html]:www.postgresql.jp
430: 02/07(金)22:21 ID:mS2jfvem(1) AAS
むしろトリガーの変更を忘れてバグったんじゃないの?
431
(1): 02/07(金)23:13 ID:El81lTJA(1) AAS
> PostgreSQLでは、トリガ動作として、ユーザ定義関数の実行しか認めていません。
> 標準では、多数の他のSQLコマンドを実行させることができます。
> 例えば、トリガ動作としてCREATE TABLEを実行させることも可能です。
> この制限を回避する方法は簡単です。必要なコマンドを実行するユーザ定義関数を作成すればよいのです。
糞仕様杉ワロタ
432: 02/08(土)11:50 ID:+3qBIV3v(1) AAS
> この制限を回避する方法は簡単です。必要なコマンドを実行するユーザ定義関数を作成すればよいのです。

この方針は正しいと思うけどな
こういうセキュリティに敏感な場所は出入口を一ヶ所に絞るのは基本だよ
433: 02/08(土)12:46 ID:3VVdck+P(1) AAS
いや色々おかしいよお前、多分DB板出身だろうから帰れ
逆に質問者もDB屋ならDB板の方が合ってるとも思うが
434
(1): 02/08(土)13:11 ID:fsW85FYF(1) AAS
正しいわけないだろw

Postgresの仕組み的に関数化が必要なら内部的にラップしとけばいいだけ
実行権限をトリガに対して設定できないとか非標準を維持し続けるほど大した意味はない
435: 02/09(日)03:19 ID:BAiRqfzU(1) AAS
ここの人らはNoSQLはどういう扱いなの
436
(1): 02/09(日)12:18 ID:kD9FDD3o(1) AAS
俺個人としては同じDB枠の扱い
プライマリキーやインデックス等、DBとしての使い方は同じで、
それを設定する言語が、SQLか、或いは一般プログラミング言語か、という程度だから

だからこのスレも俺には「DBなら俺に訊け」でもいいんだが、このスレはテンプレないんだな
俺が主流派かどうかは分からない
SQLじゃないとヤダ、って奴が多ければスレを分けるべきだろうが、
正直分けるほど人いないし、NoSQLもここで聞いていいのでは?答える奴が居るかは知らんが
省6
437: 02/09(日)18:18 ID:qhqoX22r(1/2) AAS
>>431
トリガーそのものにロジックは必要ないとしてトリガーを仕様に取り込んだせいでそうなっただけ
438: 02/09(日)18:19 ID:qhqoX22r(2/2) AAS
>>434
Oracle以外はあとからOracleDBに追従したから、元のクソ仕様のせいで制限がたくさんある。
439: 02/09(日)18:31 ID:mMq7ancL(1) AAS
出た!
DB板の荒らし
通称ボラクル君w
440: 02/09(日)22:11 ID:uTje1YE2(1) AAS
>>436
おまえ>>383のやり取りで嘘ばっか書いてたやつじゃん
反省したのか?
441: 02/09(日)22:42 ID:JhqniwEL(1) AAS
ならお前が正しいと思うことを書けばよいだけでは?
442: 02/10(月)00:33 ID:VZ2XQokR(1) AAS
nosqlは独自に覚えなきゃいけないことが多すぎるうえに制約も多い
awsとazureで同じ設計が通じるわけでもないし
443: 02/10(月)11:53 ID:Z13/KCo3(1) AAS
KVSですね判ります
444: 02/10(月)12:41 ID:y2n5AJNm(1) AAS
ベンダー違っても中身は全部Redisという場合もあるし単純なセッション管理にKVSを使うとかならベンダー違っても基本的に同じ設計になるしユースケース次第でいろいろ

NoSQLって言うだけだとリレーショナルじゃないくらいの意味しかなくて広すぎるから細かい話は一括りにはできない
445
(2): 05/11(日)23:41 ID:SmeYoeAy(1) AAS
ミックさんの達人SQLは名著だと思うんだけど、関係が体であるとしている点については、群ですらないというamazonレビューの指摘の方が正しいように思うんだよね。ただ自分は文系で群とかちゃんと勉強したことないのであまり自信はない。数学できる人教えて。
446: 05/12(月)19:12 ID:RxQ7/dSc(1) AAS
>>445
集合は数学とは違うよ
447: 05/13(火)14:41 ID:C/NhftFY(1) AAS
SQLで無限集合出来んかな
448: 05/14(水)00:52 ID:qxlPxgMn(1) AAS
なんで havingとwhereは使い分ける必要があるの?
全部whereで済むように仕様を直してほしい
449: 05/14(水)01:47 ID:tUJULNxS(1/2) AAS
意味違うと思うぞ。whereだけじゃ足りないんじゃね
450: 05/14(水)01:55 ID:tUJULNxS(2/2) AAS
評価対象が行とグループ
評価タイミングも違うとchatGPTが教えてくれた
451: 05/14(水)06:22 ID:qNLCsgAG(1) AAS
そんなこともAIに訊かなきゃわからないんかよw
452
(1): 05/14(水)08:46 ID:e7a03hqN(1/2) AAS
スレ主じゃないので
LLM勉強になるぞ
453: 05/14(水)11:40 ID:Ran/8XYC(1/2) AAS
グループ化と関係なくHAVINGを使っているんだろうなw
454: 05/14(水)11:41 ID:Ran/8XYC(2/2) AAS
>>452
AIチャットは間違いを指摘してくれない
455: 05/14(水)12:56 ID:1iop83U8(1) AAS
LLMの勉強する前に対人会話の勉強しよう?
456: 05/14(水)13:29 ID:e7a03hqN(2/2) AAS
お前らもネラーだからLLMと大差ないぞ
教科書レベルの話はLLMさんが正確さ
457: 05/15(木)09:52 ID:3t3KbsMR(1) AAS
結局、>>445ってどう? 素人考えでは、群の条件のうち、「任意の元に対する逆元が存在する(逆元も関係の元である必要がある)」を、関係および関係上の演算は満たさないようにも思うんだけど。
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.912s*