備忘を兼ねて。 「SQLを実行する際、"IN"を使うよりも"EXISTS"を使う方が速い」 というのは割と周知の事実ですが、 じゃあ、EXISTSを使う場合、 「その中身は"SELECT *"を使うべきなのか"SELECT 1(定数)"を使うべきなのか」 というと、こっちは少々微妙な問題のようです。 //遅い SELECT * FROM tbl_A WHERE tbl_A.col_a IN (SELECT col_b FROM tbl_B); //速い SELECT A.* FROM tbl_A as A WHERE EXISTS (SELECT * FROM tbl_B as B WHERE A.col_a = B.col_b);というのも、DBMSごと(さらに言えばVersionごと)に、どっちが速いかが変わってくるようなんですね。 簡単に調べてみた感じだと、だいたいこんな感じ。 DB
たまに必要に駆られるのが、2つのテーブルを比較して、1つのテーブルには存在するが、もう一方のテーブルにはないレコードを抽出するというもの。 いくつか方法がありますが、今回は主な2つをご紹介。特に②の方法が汎用的で、原理を覚えておくと、様々な場面で応用がききます。 ①差集合演算を使う・・・簡単ですが、比較するテーブルの列数、型を合わせる必要あり。 ②SQLのみで抽出・・・汎用的に使えます。一度原理を覚えると応用がききます。 はじめにデータを用意 では、さっそくやってみます。比較するテーブルは、この記事で用意した【売上テーブル】と【顧客テーブル】を使うことにしましょう。 各々のテーブルには以下のようにデータが入っていることにします。 ①差集合演算を使う 各DBには演算のための組み込み関数があり、差分を演算するものもあります。 PostgreSQL、Oracle、DB2・・・minus MySQ
SQLのチューニングをする際に、チェックする観点を掲載します。 最低限、これだけはチェックして欲しい内容です。 これらをチェックするには、人・工数・決断を必要とします。 開発メンバーの士気は下がり、場合によってはプライドすらも 傷つけます。 時間が無いのに、新たな作業を言い渡される訳ですから・・・ だ・か・ら、納期ギリギリでは「つらい」のです。 ※しかし、港は無表情で作業の依頼を指示します。 (まぁ、殴られたり、刺されたりした事は無いので・・・) どうぞ参考にして下さい。 【チェック内容】 01.サブクエリを引数に取る場合、IN述語よりもEXISTS述語を 使っているか SELECT name FROM Personnel WHERE birthday IN (SELECT birthday FROM Celebrities); ▼ SELECT P.name FROM Personnel
SQLServerで大文字小文字を区別して検索する場合は、WHERE句にCOLLATE(照合順序)を指定します。 ※SQLServer2000と2005で検証済みです。 SELECT * FROM TABLE_NAME FROM WHERE X = 'Y' COLLATE Japanese_CS_ASデフォルトでは、Japanese_CI_ASが設定されているため、ひらがな・カタカナ、そして全角・半角の区別はしません。 これをすべて区別する場合は、COLLATE Japanese_BINを設定します。大文字小文字だけ区別しない場合は、Japanese_CI_AS_KS_WSと指定します。 参考サイト SQLServer の collation (照合順序)の設定 - Enjoi Blog Windows 照合順序並べ替えスタイル
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く