Home > DB ブログ記事 一覧

DB ブログ記事 一覧
処理速度が上がるSQLの書き方
- 2010年7月11日 16:43
- DB
データベースを扱う言語としてSQL(Structured Query Language)があります。
今回は処理速度を上げるためのちょっとした記述ポイントをご紹介します。
- 結合した場合はすべての列名の前にテーブル名をつける
- IN句の引数リストには、該当する件数が多い値を左側から順に指定する
- 暗黙の型変換を回避する
- ワイルドカードは使わないようにする
- 列番号は使わないようにする
では順番に記述の仕方と処理速度が上がる理由を見て行きましょう。
使用テーブル
【社員表】
【部門表】
1.結合した場合は、すべての列名の前にテーブル名をつける
SELECT 社員名,社員表.給与,部門表.部門名 FROM 社員表
inner join 部門表
on 社員表.部門番号 = 部門表.部門番号;
↓
SELECT 社員表.社員名,社員表.給与,部門表.部門名 FROM 社員表
inner join 部門表
on 社員表.部門番号 = 部門表.部門番号;
【結果】
どちらも同じ結果ですが、指定した列名(社員名)に注目して下さい。
テーブル名を指定していないので、
どちらのテーブルにあるのか調べないといけないため、
実行速度が遅くなる可能性があります。
2.IN句の引数リストには、該当する件数が多い値を左側から順に指定する
SELECT 社員番号,社員名,雇用日,給与,部門番号 FROM 社員表
WHERE 部門番号 IN(10,20);
↓
SELECT 社員番号,社員名,雇用日,給与,部門番号 FROM 社員表
WHERE 部門番号 IN(20,10);
【結果】
IN句は左から評価し一致したら後の比較は行わない為、
左側に該当するデータが多ければ右の評価回数を減らせます。
3.暗黙の型変換を回避する
SELECT 社員番号,社員名,雇用日,給与,部門番号 FROM 社員表
WHERE 部門番号 = '10';
↓
SELECT 社員番号,社員名,雇用日,給与,部門番号 FROM 社員表
WHERE 部門番号 = cast('10' as SIGNED);
or
SELECT 社員番号,社員名,雇用日,給与,部門番号 FROM 社員表
WHERE 部門番号 = 10;
【結果】
多くのデータベースでは、比較するデータ型が一致しない場合、
可能であれば暗黙の型変換が行なわれます。
暗黙の型変換は一度失敗した後に行なわれるため、
処理速度が遅くなることがあります。
正しいデータ型を指定するか、明示的に型変換をしましょう。
4.ワイルドカードは使わないようにする
SELECT * FROM 社員表;
↓
SELECT 社員番号,社員名,雇用日,給与,部門番号 FROM 社員表;
これに関しては、メンテナンス、わかりやすさの観点から推奨です。
5.列番号は使わないようにする
SELECT 社員番号,社員名,雇用日,給与,部門番号 FROM 社員表
ORDER BY 4;
↓
SELECT 社員番号,社員名,雇用日,給与,部門番号 FROM 社員表
ORDER BY 給与;
【結果】
ORDER BY 句ではソートのキー列として、
実際の列名の代わりに列番号を指定できますが、
列名への読替えが発生するため、処理速度が遅くなることがあります。
まとめ
SQLの処理を高速化するためのポイントは、まだまだ他にもたくさん
ありますが、SQLを見直すことで改善できるものをご紹介しました。
ただ、SQLを学習したばかりの頃は正しい結果を得られることが一番ですので、
まずはそこを押さえましょう!
また、今回はMySQLでのSQL文を使用しています。
データベース製品によって記述が変わる部分がございますので、
ご了承下さい。
--------------------------------------------------------------------------------
パソコンスクール KENスクール大宮校 Programインストラクター
http://www.kenschool.jp/school/omiya/index.html
KENスクールでSQLを学びたい方は、Program講座へ!
http://www.kenschool.jp/Program/index.html
- Comments (Close): 0
- TrackBacks: 0
SQLインジェクション
- 2009年3月31日 21:36
- DB
インターネットのセキュリティの記事でよく目にする
SQLインジェクションについて取り上げたいと思います。
SQLはデータの検索や操作、定義を行うための
データベース用の言語です。 
インジェクションは注入、注射などの意味があります。
SQLインジェクションはSQLに注射すること??? 
これはおかしいですね。
SQLインジェクションとは、もともとのSQL文に違うSQL文を注入して
不正にデータ検索を行ったり、 データ改ざんをすることです。
または、不正行為に対する対策が立てられていない脆弱性を指します。
ショッピングサイトがSQLインジェクション対策をしっかりと行っていないと
知らない間に個人情報が漏えいしたり、頼んでもいない商品が届いてしまったり、
頼んだ商品がいつまでたっても届かなかったりするということです。 
おそろしい・・・。
使いやすいサイトだけではダメで
安全で安心して利用できることも大切ですね。
インフルエンザが流行っていましたが,
今のところインフルエンザにかからずに済んでいます。
これも予防接種のおかげかな。。。 ![]()
--------------------------------------------------------------------------------
パソコンスクール KENスクール渋谷校 Programインストラクター
http://www.kenschool.jp/school/shibuya/index.html
KENスクールでSQLを学びたい方は、Program講座へ!
http://www.kenschool.jp/Program/index.html
- Comments (Close): 0
- TrackBacks: 0
Oracle DB
- 2008年9月12日 13:03
- DB
皆さんは「DB」 と聞いて何を思い浮かべるでしょうか?
ドラゴンボール!! ★゚・:*:・。d(。ゝд・)
……・・・
今回は「データベース」について、
中でもORACLEについて触れていきたいと思います。![]()
Oracleとはご存知のように、会社名です。
Oracle Databaseは、
世界初の商用リレーショナルデータベース管理システム(RDBMS)です。
RDBMSの他にも、いろいろなソフトウェアをリリースしております。
米Oracleは、1977年にデータベース管理ソフト開発を始めてから、
2007年に記念すべき 創業30周年を迎えました。
(*・x・)/。・:*:・゚´★゚・:*:・。☆Congratulations ;*・'゜☆v(*'-^*);*・'゜
Oracleは、1977年(昭和52年)6月16日にOracleの前身である
「Software Development Laboratories」を設立。
後に「Oracle」と社名を変更しました。
1978年に「Oracle Version 1」をリリースしますが、
残念ながらこの初期バージョンは世に出ませんでした…
1979年、初めてのRDBMSとしてリリースされたのが「Oracle Version 2」です。
以降、1983年にはPC上で動作する初のRDBMS「Oracle Version 3」を、
1984年には並行性制御(読取り一貫性)を導入した「Oracle Version 4」を、
1985年にはクライアント/サーバー環境で動作する
分散型RDBMSの「Oracle Version 5」を、
1988年にはパフォーマンス向上の要求に応え、
更に機能追加をされたのが「Oracle Version 6」をリリースしてきました。
6までは「Version」と付いていましたが、
7以降はVersionが無くなり「Oracle 7」、「Oracle 8」となりました。
後続バージョンは、インターネット・コンピューティング機能を適用した
「Oracle 8i」「Oracle 9i Database」をリリース。
2003年には、RDBMS初のグリッド・コンピューティング製品
「Oracle Database 10g」をリリース。
「10g」は「grid」の「g」で、
グリッドコンピューティングとは、ネットワークを介して、
1台1台のマシンの性能は低くても、それら複数のマシンを結びつける事により、
巨大な1台の仮想的な高性能コンピュータを作る技術のことです。
そして、2007年・・・
30年の月日を経て数々の技術を費やし、
最新バージョン11gを発表! 。+゚(*´∀`*)。+゚
米Oracleプレジデントのチャールズ・フィリップス氏は、
「多数のリソースと30年にわたる経験を詰め込んだOracleの集大成」
と11gをアピールしてます。
11gって、10gと何が違うのか?
実は、11gからは「g」が「グラム」って単位なんです。
…な訳ないよね。 ゞ( ̄∇ ̄;)
タウリン1000mgって、結局は1gなんだよねー。
リポD飲んでガンバリマス!! ( ´~)◇y
うん。11gもグリッドコンピューティングを受け継いでいる訳ですね。
では、そんな(どんな!?)11gを簡潔にご説明したいと思います。
~Real Customer Release~
このコンセプトの如く、11gは
ユーザーの要望を第一に考え反映した製品
と言われております。
使う人に優しいOracleさまって感じですね。
11gを日本でリリースしたのが、昨年10月のこと。
もちろん私もOracleサミットに参加してまいりました!
初めて参加させて頂いたので、
子供のように今か今かとそわそわ落ち着き無くその幕開けを待ってました。
いやいや、すごいのすごくないのって本当に! (;゚Д゚,)
アーティストのライブが始まるのかの如く、ド派手な幕開けでした。
地味な感じなのだろうと勝手に想像してたので、驚きでした。
10gから4年の歳月を経てメジャーアップデートした11gは、
400を上回る機能追加と機能強化を実現しました。
10gに更に400以上も追加機能を施してしまうなんて、
さすがはOracleさまさまです。 (人´∀`).☆.。.:*
様々な書籍やサイトでも紹介されているので、皆様ご存知かと思いますが、
一例を挙げますと、
・テスト準備の自動化と準備期間の短縮
「Real Application Testing」
・スタンバイ・データベースをテスト環境として使用可能
「Oracle Data Guard -Snapshot Standby」
・タイムマシンのように、どの時点のデータまでも遡ることが可能な
「Total Recall」
・バックアップサイトの有効活用による本番サイトの効率化とリソースの削減
「Oracle Active Data Guard」
・ファイル形式のデータをデータベースに格納するための機能
「Oracle SecureFiles」
などなど、様々な機能追加と機能強化がされております。
詳しくはOracle社のWebサイトでご確認ください。 φ(。_。*)
では、資格的にはどうなのでしょうか?
現在、ITエンジニアに人気の資格は何なのでしょうか?
数多くあるベンダ資格の中で、
現場で役立った資格第1位は、ORACLE MASTER Silver。
今後取得したい資格に関しては、
1位 ORACLE MASTER Silver
2位 ORACLE MASTER Gold
3位 ORACLE MASTER Bronze
と、トップ3をORACLE MASTERが総なめ。
ORACLE MASTERの人気の高さが伺えますね。(※@IT参考)
これは、「10g」ですが、11gも間違いなく人気は出ると予想されます。
インストラクターを勤めさせて頂いている私としては、
「試験どうなるのかな…」って思ってしまったのが本心だったりします…
今でこそNo.1シェアを誇るOracleですが、
その背景にはやはり競合他社があってこそなのだと思います。
ライバルには、Microsoft社のSQL Serverや、IBM社のDB2などが挙げられます。
そんなライバルがいたからこそ、今のOracleがあるんだなーと感じ受けられます。
Oracle通信には、
「Oracleデータベースが今後どのように発展していくかは言明できませんが、
これまで提供してきたアーキテクチャと技術的な理念に基づき
構築が進められていくことは間違いないでしょう。」
と記載されております。![]()
今後も数々のホワイトペーパー等を拝見させて頂き、
Oracleの新たな発展に期待していきたいですね!
- Comments (Close): 0
- TrackBacks: 0
MySQLとPostgateSQL
- 2008年8月10日 22:41
- DB
共にフリーのデータベースとして有名な MySQLとPostgreSQL。
今年の2月に、サン・マイクロシステムズによる買収があったこともあり、ちょっと話題のMySQL。
じゃあ一方のPostgreSQLは… 
ちょっとさみしい気がして(本当に個人的に)、
2つの違いを見てみることにしました。
ところがこの2つ、リリースの時期も大差なく、ライセンスの方式は違うものの、
一定の範囲内であれば無償で利用できる。
さらにOS面。PostgreSQLはバージョン8.0からWindowsに正式対応。
機能面でも、MySQLはバージョン5.0での機能追加で、
今まで PostgreSQLと比較して足りなかったものを補った形です。
そういえば名前もちょっと似てますかねぇ…
しかし、全く違う点があるんです。 
どちらもクライアントからSQL文を発行することで、サーバのデータベースへ問い合わせを行う設計になっています。
しかし、違いはSQLを受け取ったサーバ側の動きにありました。
MySQLが マルチスレッド構成なのに対し、 PostgreSQLは マルチプロセス構成なのです。 
データベースは、複数のユーザーからの問い合わせを同時に、並行して行う機能が必要です。
その方法として、マルチスレッド構成と マルチプロセス構成があります。
マルチスレッド構成は、 複数のユーザーから接続されても、起動されるアプリケーションは1つです。
その中にスレッドという小さな処理を複数作成し、それらのスレッドが並行して同時に処理を行います。
つまり、小さな処理のためアプリケーションの起動が早いという利点があります。
一方のマルチプロセス構成は、ユーザーからの接続ごとにアプリケーションを起動し、同時にいくつも並行して処理を行う方法です。
それぞれのアプリケーションが独立しているため、安定性が高いことが利点です。
何でも、良い面もあれば、足りない部分もあるものです。 
それぞれの特長を生かして、目的に合ったデータベースを選択することが重要なようですね。 
- Comments (Close): 0
- TrackBacks: 0
Home > DB ブログ記事 一覧


