SQL Serverのデータ、Magic側でインデックスは指定するのが望ましいのか?
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
nkmt
投稿数: 1668

例えば過去10数年分の大量の売上明細データがあり
速度を求める為、売上明細上に
売上日・得意先コード・商品コードなどを項目として
持っているとします。
そしてこの売上明細データには
伝票番号+行
商品コード+売上日
商品コード+得意先+売上日
といった複数のインデックスも用意してあるとします。
Pervasiveだと、Magicのプラグラム側で使用する
最適なインデックスを必ず指定するようにしておりました。
SQLコマンドではなく普通のMagicのプログラミングで
SQL Serverの場合もPervasive同様に
if(条件A, '2'INDDEX, if(条件B, '3'INDDEX, '1'INDEX) )
といった指定をされていますか?
※追記:紛らわしい記述が有ったので編集しました。
速度を求める為、売上明細上に
売上日・得意先コード・商品コードなどを項目として
持っているとします。
そしてこの売上明細データには
伝票番号+行
商品コード+売上日
商品コード+得意先+売上日
といった複数のインデックスも用意してあるとします。
Pervasiveだと、Magicのプラグラム側で使用する
最適なインデックスを必ず指定するようにしておりました。
SQLコマンドではなく普通のMagicのプログラミングで
SQL Serverの場合もPervasive同様に
if(条件A, '2'INDDEX, if(条件B, '3'INDDEX, '1'INDEX) )
といった指定をされていますか?
※追記:紛らわしい記述が有ったので編集しました。
投票数:0
平均点:0.00
ISHIJIMA
居住地: 静岡県
投稿数: 1827

私は管理をすべてMAGICで行っているのでMAGICとSQLSERVERは同じにしています。
ただあまりキーは増やしていません。
ただあまりキーは増やしていません。
投票数:0
平均点:0.00
nkmt
投稿数: 1668

ISHIJIMAさん、ありがとうございます。
私の質問の仕方が紛らわしかったかもしれません。
私もMagic上でSQL Serverのデータを定義しております。
Magicのプログラムミングの中で
タスクで使用するインデックスを明示する/しないが
重要か、速度に影響が出るのかを知りたいです。
私の質問の仕方が紛らわしかったかもしれません。
私もMagic上でSQL Serverのデータを定義しております。
Magicのプログラムミングの中で
タスクで使用するインデックスを明示する/しないが
重要か、速度に影響が出るのかを知りたいです。
投票数:0
平均点:0.00
ISHIJIMA
居住地: 静岡県
投稿数: 1827

勘違いしていました。
SQLSERVERから使用した事かありませんね
あまり気にした事がないので速度等問題ないのかもしれません。
答えになっていない思いますがすみません。
SQLSERVERから使用した事かありませんね
あまり気にした事がないので速度等問題ないのかもしれません。
答えになっていない思いますがすみません。
投票数:0
平均点:0.00
nkmt
投稿数: 1668

レスありがとうございます。
プログラミングで工数を減らしたいのと、パフォーマンスを考えての質問でした。
インデックスを複数用意した場合、どのインデックスを使うかによって並び順は多いに影響しますね。
データの読み出し順序に影響するので
大量データから少量抽出する際、
最適なインデックスが準備されているのであれば
インデックスは明示した方が望ましいのかもしれないですね。
今までもそのように記述してきたので、今後もそのようにしたいと思います。
データにインデックスをあまり用意せずに
SQLコマンドではなく、普通のMagicの作りの場合は
ソート を指定する事もお有りなんでしょうね。
仮想キーを用意する方もおられるでしょうし
取り出したデータをインデックスを用意したメモリWFに
書き出す方もおられるでしょうし。
私は完全正規化をせずに
インデックスに成り得る項目を
明細データにも持たせて
売上伝票にも売上明細にもインデックスを数本用意する事が
多いです。
過去の明細や伝票も消さずに残す事が多いので、そういった作りになってしまうのでしょうね。
プログラミングで工数を減らしたいのと、パフォーマンスを考えての質問でした。
インデックスを複数用意した場合、どのインデックスを使うかによって並び順は多いに影響しますね。
データの読み出し順序に影響するので
大量データから少量抽出する際、
最適なインデックスが準備されているのであれば
インデックスは明示した方が望ましいのかもしれないですね。
今までもそのように記述してきたので、今後もそのようにしたいと思います。
データにインデックスをあまり用意せずに
SQLコマンドではなく、普通のMagicの作りの場合は
ソート を指定する事もお有りなんでしょうね。
仮想キーを用意する方もおられるでしょうし
取り出したデータをインデックスを用意したメモリWFに
書き出す方もおられるでしょうし。
私は完全正規化をせずに
インデックスに成り得る項目を
明細データにも持たせて
売上伝票にも売上明細にもインデックスを数本用意する事が
多いです。
過去の明細や伝票も消さずに残す事が多いので、そういった作りになってしまうのでしょうね。
投票数:0
平均点:0.00
pu_mahalo
居住地: 大阪
投稿数: 775

こんにちは Puです
オプティマイザに任せるのがベターだと思います
それでも遅い場合のみ キーを明示的に指定するのが
基本だと思います
SQL文を記述するのに わざわざキーを指定しませんよね
MAGIC側がどんなSQL文を発行しているかわかりませんが
基本SQLserverの場合はオプティマイザ任せです。
でわ〜でわ〜
オプティマイザに任せるのがベターだと思います
それでも遅い場合のみ キーを明示的に指定するのが
基本だと思います
SQL文を記述するのに わざわざキーを指定しませんよね
MAGIC側がどんなSQL文を発行しているかわかりませんが
基本SQLserverの場合はオプティマイザ任せです。
でわ〜でわ〜
投票数:0
平均点:0.00
nkmt
投稿数: 1668

Puさんレスありがとうございます。
よろしければ教えてください。
オプティマイザというのは何ですか?
(恥ずかしながら何もわかりません。)
SQL Serverの何かToolでしょうか?
データの並び順が大事な画面表示や印刷処理では
インデックスを指定しますが(あるいはソート)
ただ絞込み 内部で集計するような処理の場合は
複数インデックスが定義されているデータであっても
メインソースのインデックス指定は 常に 1番
の指定でも良いという事なのでしょうか?
よろしければ教えてください。
オプティマイザというのは何ですか?
(恥ずかしながら何もわかりません。)
SQL Serverの何かToolでしょうか?
データの並び順が大事な画面表示や印刷処理では
インデックスを指定しますが(あるいはソート)
ただ絞込み 内部で集計するような処理の場合は
複数インデックスが定義されているデータであっても
メインソースのインデックス指定は 常に 1番
の指定でも良いという事なのでしょうか?
投票数:0
平均点:0.00
pu_mahalo
居住地: 大阪
投稿数: 775

こんにちは Puです
最適化してくれる頼もしい奴です。
以下文献から引用
---------------------------引用開始
クエリ最適化をユーザーが直接操作することはできない。クエリがデータベースサーバ (DBMS) に対して発行され、パーサーが構文解析すると、その結果がクエリオプティマイザに送られ、クエリ最適化が行われる。
--------------------------引用終わり
最適化してくれる頼もしい奴です。
以下文献から引用
---------------------------引用開始
クエリ最適化をユーザーが直接操作することはできない。クエリがデータベースサーバ (DBMS) に対して発行され、パーサーが構文解析すると、その結果がクエリオプティマイザに送られ、クエリ最適化が行われる。
--------------------------引用終わり
投票数:1
平均点:0.00