タグ

SQLとtipsに関するastk_fのブックマーク (4)

  • SQLが重いときに見るお気軽チューニング方法

    SQLのチューニング方法 昔Qiitaで書いたものをzennうつして、若干の修正、追加をしてみました。 ORACLEでの経験を元に書いていますがコストベースのリレーショナルデータべースなら大体共通の考え方だと思うので他にも使えると思います。 SQLのチューニングといえば比較的容易に済むインデックスをとりあえず作成する。といった対応を取られがちですが、数万レコード程度でのデータ量ではあまり効き目がなく(自分の経験則)、どちらかといえば、結合順が大幅に狂ってたりすることが原因のことが多かったりします。よって当にインデックスがないことが原因なのか?を熟考する必要があります。(例えばID以外のフラグとかコードに単項目indexを貼ってるのもみたことがあります。怖いけど実話) また、インデックスを作りすぎるとオプティマイザが狂いやすくなって他のSQLにも悪影響を及ぼしたりするので結構熟慮して追加

    SQLが重いときに見るお気軽チューニング方法
  • PostgreSQLで全角半角大文字小文字ひらがなカタカナを区別せず検索したい!というよくあるわがままに応える - ほんじゃらねっと

    したいしたい!絶対したい!と駄々をこねられたので調査してみた。 こういった区別なし検索を実装する方法としてパッと思いつくのは、 あらかじめ検索対象となるカラムの検索用カラムを用意して、 データ変更時にトリガーで 元カラムの内容を半角小文字英数字カタカナに変換したデータが入るようにしておき、 検索時はその検索用カラムを使用する、という方法。 これはめんどくさそうだ。 SQL Serverは照合順序の設定で制御できるらしい。 照合順序と Unicode のサポート PostgreSQLも同じことができないかと調べてみたけど、対応してなさそう。 第22章 多言語対応 他に方法がないか調べてみると、 「式インデックス」を使って、自作の変換用関数で変換したデータを インデックスに登録しておく方法を試しているページがあった。 PostgreSQLで全角半角を区別しない問い合わせ この方法なら少なくとも

    PostgreSQLで全角半角大文字小文字ひらがなカタカナを区別せず検索したい!というよくあるわがままに応える - ほんじゃらねっと
  • ORDER BYで、単純な昇順降順「以外」で並べる! - なからなLife

    いやー、知らないって怖いね。 なんだこのキモいSQLは、って思ってしまったけど、調べているウチに、これちゃんとSQL構文に則ってる!こちらが間違ってた!って事がわかっていきました。 あえて、知らなかった所から勢いで書いていたのを、そのままにしてみました。 キモいSQLコードを偶然見つけた SQLにおけるORDER BYって、その後にカラム(およびそのエイリアス)を並べてソート順として使用するわけですが、MySQL案件のお仕事の中で偶然こんなものを見つけて、絵に描いたような二度見リアクションしました。 SELECT * FROM tbl ORDER BY id = 23; -- (1) SELECT * FROM tbl ORDER BY FIELD( id, 23, 234, 543, 23 ); -- (2)こうした、「ORDER BYに、あたかもWHERE句で絞り込む条件指定のような使

    ORDER BYで、単純な昇順降順「以外」で並べる! - なからなLife
  • クエリチューニング: GROUP BY から LATERAL への書き換え - Qiita

    「ユニークキーの GROUP BY」 を 「LATERAL」 に書き換えることで、クエリを性能改善できる可能性があります。 ここでは、非常にシンプルな書き換えの例を示します。 テーブルの準備 まずは、以下のような「部署」、「書籍」、「部署ごとの書籍在庫数」を管理する3つのテーブルを準備します。 なお、「書籍」テーブルは、データベースの状況をイメージしやすいように用意しているだけで、以降のクエリ書き換えでは特に使いません。 -- 部署のIDと名前を管理するテーブル department を作成 CREATE TABLE department (dept_id INTEGER PRIMARY KEY, name TEXT); -- 部署の情報を5件登録 COPY department (dept_id, name) FROM stdin; 1 総務部 2 開発部 3 財務部 4 企画部 5 購

    クエリチューニング: GROUP BY から LATERAL への書き換え - Qiita
  • 1