タグ

sqlとdbに関するd_animal141のブックマーク (53)

  • Rails: 闇雲にインデックスを付けてはいけない(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Don't index the kitchen sink! 原文公開日: 2015/07/09 著者: Jeroen Weeink サイト: Crafting Ruby 最近、使われてないインデックスを外す作業を行ってたのですが、やってみると出るわ出るわ。そのほとんどは、逆関連付けの不要なモデルのJOINの一部でした。次の例で考えてみましょう。 class ShoppingCart < ActiveRecord::Base has_many :shopping_cart_products has_many :products, through: :shopping_cart_products end class ShoppingCartProduct < ActiveRecord::Base belongs_to :shoppin

    Rails: 闇雲にインデックスを付けてはいけない(翻訳)|TechRacho by BPS株式会社
  • Railsエンジニアなら知っておきたい!RDBでindex作成を検討するときってどんなとき? - Qiita

    はじめに 前回に引き続き、またまたDBネタです(^o^) 前回:Railsエンジニアなら最低限これだけは知っておきたいSQLJOINの動き 今回は、インデックスについてです。インデックスにはいくつか種類がありますが、 RDBで一般的に使われるB-treeインデックスについて書いていきます。 いきなりですが、インデックスは深い!かなり深い!バイカル湖くらい深いです。 ある程度の指針的なものはありますが、インデックスをどう設計するかの見極めは状況によって変わってくるようです。クエリの実行頻度、テーブルサイズ、カーディナリティ(カラム内のデータの種類の多さ)などなど。。 なので今回は、こんなときはインデックス作成を検討した方がいいというパターンだけザッとまとめる感じで行きたいと思います。 なお、今回の記事作成にあたっては、以下のを参考にさせて頂きました。 そもそも的なところから分かりやすく書

    Railsエンジニアなら知っておきたい!RDBでindex作成を検討するときってどんなとき? - Qiita
  • index の複数形は indexes なのか indices なのか - 猫でもわかるWebプログラミングと副業

    プログラマーが覚えておきたい英単語(http://blog.livedoor.jp/lalha/archives/50165797.html)によると インデックスを表す単語の index の複数形についての表現。普通に複数形にすると indexes になりそうなものだが、公開されている API などを見ていると、indices が使われていることが多い。英英辞典などを見ると、indexes も indices も載っているので、両方とも間違いではないと思われる。 とある。 一方で、『SQLアンチパターン』では、 データベース関連の用語として用いられる場合、indexは順番に並べられた情報の集合を意味します。この場合のindexの望ましい複数形はindexesです。他の文脈では、indexはindicatorを意味することがあり、この場合の複数形はindicesです。 とある。 Webli

    index の複数形は indexes なのか indices なのか - 猫でもわかるWebプログラミングと副業
  • INとEXISTSの違い - SQLer 生島勘富 のブログ

    INとEXISTSは違います。 BETWEENと、不等号の組合わせなど、等価になる記述法はあるのですけれど、INとEXISTSは基的に同じ結果を返すことが可能ですが、意味は違います。 この違いが分かるにはインデックスを理解する必要がありますので、まずは、インデックスのイメージをつけてください。 まずはイメージ ここでも、まずはイメージで考えましょうね。 あなたは先輩の結婚式の司会を頼まれましたとします。イロイロと準備がありますが、余興で歌を歌う人がいるとき、予めカラオケの番号を調べておくでしょう。 事の間のBGMについては、ラブソングの入ったiPodをつないでランダムで流すことにしましょう。しかし、新郎新婦にとって(過去の恋愛経験上)都合の悪い曲があり、チェックしてはじいておくことにしました(なかなか、そつがない司会ですな)。 これらの処理をSQLにするならば……。 ■カラオケの番号を

    INとEXISTSの違い - SQLer 生島勘富 のブログ
  • 非エンジニアが最速でSQLをマスターする方法 - Gunosy Tech Blog

    こんにちは、データ分析部の石塚です。 Gunosyではエンジニア以外の職種でもSQLを叩いて自らデータを集計・分析するという習慣と全社員が各サービスのログ*1に触ることができる環境があります。 例えば、ユーザー獲得を担っているプロモーションチームはエンジニアが0名のチームなのですが、実際にSQLを叩いています。 それによって、自分たちの獲得したユーザーはどのような行動をしているのかを確認したり、分析することができています。 これはGunosyのみの事例ではなく、AWSのRedshiftやAthena、GCPのBigQueryが台頭してきたおかげで、どの会社も低コストにログをSQLで集計・分析できる基盤が整ってきています。 個人的にはアプリやウェブの業界で働くマーケターにはSQLは必須の知識と言える時代になってきたと感じています。 そこで今回は特別プログラミングなどの経験が無い人でも、SQL

    非エンジニアが最速でSQLをマスターする方法 - Gunosy Tech Blog
  • PostgreSQLのbackup, restore方法まとめ - Qiita

    (1) PostgreSQLのダンプツールを利用したバックアップ pg_dumpコマンド DBを運用しながらでも使えるbackupコマンド 中ではトランザクションブロック内でSELECT文を発行し、取得したデータを出力形式に合わせて整形した腕標準出力に出力 するらしい。 pg_dumpの出力形式 スクリプト形式(デフォルト) アーカイブ形式 が選択できる。 スクリプト形式 スクリプト形式の出力は、リストアに必要なSQL文の羅列が出る。 ので、psqlコマンドでリストアする。 スクリプト形式の場合はプレーンテキストなので、リストアの際にエラーが出たら、中を見れるという利点がある。 アーカイブ形式 バイナリの形で出力される。リストアはpsqlコマンドでなくpg_restoreコマンドで行う。 アーカイブ形式の利点は、 「指定したtableのみを選択してリストアできる」ことらしい。 また、アーカ

    PostgreSQLのbackup, restore方法まとめ - Qiita
  • Arelでクエリを書くのはやめた方が良い5つの理由

    はじめに:Arelって何? みなさん、Arel(アレル)ってご存知ですか? ArelはActive Recordの内部で使用されるSQL生成ライブラリです。 Railsのクエリの書き方をググると、ときどきArelを使った実装例が見つかるので、見たことがある、もしくは何度か使ったことがある、という人もいると思います。 Arelをよく知らない人のために、Arelの利用例をちょっと見てみましょう。 たとえば「コメント文中に、"ruby"が含まれるユーザープロフィールを検索したい」という場合、Rails標準のクエリインターフェースを使うと条件部分のSQLを文字列で書く必要があります。(PostgreSQL環境を想定) Profile.where( "profiles.comment ILIKE ?", "%ruby%" ).to_sql #=> SELECT "profiles".* # FROM

    Arelでクエリを書くのはやめた方が良い5つの理由
  • [SQL] 11. トランザクション 2

    SQL 11章 トランザクション 11.1. トランザクションの特性 11.2. コミットとロールバック 11.3. トランザクションの構文 11.4. 排他制御 11.5. ロック 11.6. トランザクションの定義 11.4. 排他制御 排他制御とは、あるトランザクションが実行中のときに、そのトランザクションが対象としているデータをロックし、他のトランザクションのアクセスを禁止することによって、データの整合性を確保しようとする仕組みです。トランザクションが完了すれば、ロックは解除され、他のトランザクションはデータにアクセスできるようになります。 例えば、あるお店の在庫管理テーブルに商品が 30個登録してあるとします。販売員 P さんが商品 A を 15個販売し、ほぼ同じ頃に販売員 Q さんが商品 A を 5個販売しました。このとき、二人の販売員が在庫管理テーブルのデータを更新しようと次

  • 分析SQLのコーディングスタイル - クックパッド開発者ブログ

    SQL、書いてますか? こと大規模データ処理の分野においてはSQLはもはや標準インターフェイスであり、 分析やらバッチやらに関わっている皆様は日々大量のSQLクエリーを生産していることと思います。 そこでちょっと気になるのが、 SQLのコーディングスタイルってどうするのが一般的なんだっけ……? という点です。 イマドキはSQLなんてO/R mapperに吐かせることが多いからなのか、 それともコードを広い範囲で共有することがそもそもないからか、 SQLのコーディングスタイルについて見聞きすることは他のプログラミング言語に比べるとだいぶ少なく、 いまいち決定版と言えるスタイルがないなと感じています。 そんなわけで日は、SQLのコーディングスタイルについての意識を活発化させるべく、 クックパッドでわたし(青木)が使っているコーディングスタイルから特徴的な点を紹介したいと思います。 特に、分析

    分析SQLのコーディングスタイル - クックパッド開発者ブログ
  • 僕はSQLをこう学んだ | mah365

    いくらRDBの操作を抽象化してくれる便利なライブラリ(ORマッパーとか)を使っていても、それでもRDBを使う限りは、テーブル設計の考え方にしろ抽出ロジックの考え方にしろ、SQLを知っていないとやりづらいと思うのです。 でも正直、「SQLこう学べば一発でわかるようになるよ」と言えるほど教えるノウハウはない。なので、僕がどうSQLを勉強したか書いておこうと思います。 正直、情報処理の試験で問われるまでSQLを使う用事がなかった プログラミングの歴だけは長いのですが、SQLを勉強する必要が出たのは、新卒で入社した会社で「ソフトウェア開発技術者(現・応用情報処理技術者)を取りなさい」と言われてからです。 いきなりお勉強的なムードからSQLを学ぶ必要が出てしまったので、最初は全くやる気にならなかった・・・ので、これはいかんと思って、何とか手を動かそうと思って、手にとったのがSQL書き方ドリルという

    僕はSQLをこう学んだ | mah365
  • データベースはなぜ必要なの?

    データベースとは、その名の通り、なにかしらの情報(データ)を蓄積した集合体です。ただし、ただ無作為に蓄積すれば良いというものではありません。あとから検索/分析することを目的に、ある一定のルールに基づいて蓄積した情報のことをデータベース(DBDataBase)と言います。また、データベースを管理するための専用ソフトウェアのことをデータベース管理システム(DBMS:DataBase Management System)」と言います(ただし、記事では特別に限定することなく「データベース」といった場合、「データベース管理システム」を含むものとします)。 データベースは身近な「床下の力持ち」 もっとも、データベースというと、「なんか難しそうなんだよね」「そもそも自分の生活とは無関係なんじゃない?」などと考えている人も多いようです。あるいは、新しい環境で記事を読みながら「未知の世界へ乗り出すんだ

    データベースはなぜ必要なの?
    d_animal141
    d_animal141 2016/02/14
    データベースの基本を理解しよう - データベースはなぜ必要なの
  • 第2回 一番の基本、シーケンシャルスキャン | gihyo.jp

    さて、前回の大まかな地図を元に、第2回では実際に問い合わせ手法の詳細について見ていきます。最初に取り上げるのはシーケンシャルスキャンという、データベース検索の最も基になるアクセス手法です。 シーケンシャルスキャンとは シーケンシャルスキャンは、日語に直訳すると「順次検索」という形になります。端的に言ってしまえば「すべてのデータを順に検索する」ということで、結果として通常はすべてのデータを読み込んで返します。その後、検索条件や取得件数などの必要に応じてフィルタリングが行われることもあります。この方法は、すべての件数を対象として検討するため、条件を選ばず使えます。そのほか、どんな複雑なSQLが来てもシーケンシャルスキャンなら取りこぼしがありません。たとえばなんの変哲もない といったSQLを実行するに当たっては、シーケンシャルスキャンを使います。 図1 シーケンシャルスキャンの実行形 シーケ

    第2回 一番の基本、シーケンシャルスキャン | gihyo.jp
    d_animal141
    d_animal141 2016/01/22
    一番の基本,シーケンシャルスキャン|gihyo.jp
  • PostgreSQLのフィールドにハッシュ形式(hstore)でデータを登録する

    PostgreSQLでは、hstoreというハッシュ形式でデータを保存するデータ型があるようなので試してみました。 試したのは、Arch LinuxにインストールしたPostgreSQL 9.1.3です。

    PostgreSQLのフィールドにハッシュ形式(hstore)でデータを登録する
    d_animal141
    d_animal141 2015/11/12
    PostgreSQLのフィールドにハッシュ形式(hstore)でデータを登録する
  • date、datetime、timestampの違い - なるようにしかならん

    「あれ?」っていつもなるので少しでも覚えられるように書いておく。 まぁ以下のリンクを見れば済む話ではあるのだが。 http://dev.mysql.com/doc/refman/4.1/ja/datetime.html 転写になるけどまとめておく。 DATETIME 型 ・日付と時刻の両方の情報を昼用とするときに使用する ・形式は'YYYY-MM-DD HH:MM:SS' ・範囲は'1000-01-01 00:00:00' 〜 '9999-12-31 23:59:59' DATE 型 ・日付値のみ必要とし、時刻部分は必要でない場合に使用する ・形式は'YYYY-MM-DD' ・範囲は'1000-01-01' 〜 '9999-12-31' TIMESTAMP 型 ・insertまたはupdate操作に対して、現在の日付と時刻を自動的に指定することができる。TIMESTAMP型のカラムが複数あ

    date、datetime、timestampの違い - なるようにしかならん
    d_animal141
    d_animal141 2014/10/27
    date、datetime、timestampの違い
  • ActiveRecord4でこんなSQLクエリどう書くの? Arel編 | Webシステム開発/教育ソリューションのタイムインターメディア

    ActiveRecord4でこんなSQLクエリどう書くの? Merge編 では、関連先のscopeを使うことができるmergeを紹介しました。mergeを使う事で、変更に強いクエリを美しく組み立てることができました。 今回は、ActiveRecord4で書きにくいSQLクエリたちを紹介します。 書きにくいクエリとは、具体的には以下のものがあげられます。 比較演算ORlikeleft outer joinunionサブクエリexists ActiveRecordでこれらのクエリを組み立てる場合、どうしても美しくない(SQL文字列をべったり書いてしまうような)書き方となってしまいがちです。 この処理を美しく書くためには、ActiveRecordだけの機能では足りず、ActiveRecordが内部で使っているArelというライブラリを使う必要がでてきます。 今回は、Arelを使って華麗にSQL

    ActiveRecord4でこんなSQLクエリどう書くの? Arel編 | Webシステム開発/教育ソリューションのタイムインターメディア
    d_animal141
    d_animal141 2014/10/02
    ActiveRecord4でこんなSQLクエリどう書くの? Arel編
  • accessclub.jp - このウェブサイトは販売用です! - アクセスクラブ リソースおよび情報

    This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.

    d_animal141
    d_animal141 2014/09/23
    SQLの基本的な記述方法
  • 論理削除と一意性制約を両立させる方法・DB製品別 - Qiita

    アプリケーション上でなにかエントリ(例えば記事だとかユーザだとか)を削除したとき、DB上の行は削除せず単に【削除済み】フラグを立てるだけという扱い方を 論理削除 と呼びます。 論理削除にはいろいろなメリットがあります。行削除のように関連する他テーブルへ削除が波及しないこと、エントリ復活ができること、障害時にデータ変更の経緯を追いやすくなることなどなど(デメリットもわんさかあるんですが、この記事の主旨からははずれるので別途お調べください)。 ところが論理削除の方針でDBを組んでいて困ったことはありませんか? 「 メールアドレスは一意性(UNIQUE)制約をかけたいのに、それだと削除済みのユーザと同じメールアドレスが使えないことになる 」 論理削除と一意性制約、両立はできないのか? できないと思っている方、多いと思います。実はちゃんとできます。DB製品によって実現方法がちょっと違ってくるだけで

    論理削除と一意性制約を両立させる方法・DB製品別 - Qiita
    d_animal141
    d_animal141 2014/08/16
    SQL - 論理削除と一意性制約を両立させる方法・DB製品別 - Qiita
  • インデックスの基礎知識

    ■ インデックスとは データベースの世界で、インデックス(索引)とはテーブルに格納されているデータを 高速に取り出す為の仕組みを意味します。 インデックスを適切に使用することによってSQL文の応答時間が劇的に改善 される可能性があります。 インデックスにはB-Treeインデックスをはじめ、ビットマップインデックス、 関数インデックスなどの種類がありますが、ここでは最も一般的に使われ、かつ ほとんどのDBMSでサポートされているB-Treeインデックスについて解説します。 ※ CREATE INDEX文でオプションを指定しない場合は通常B-Treeインデックスが 作成されます。 ■ B-Treeインデックスのしくみ B-Tree(Balanced Tree)インデックスは次のようなツリー状の構造になっています。 ツリーの先頭はヘッダブロックと呼ばれています。ヘッダブロックでは、キー値の 範囲

  • Railsでincludesを使ってSQLを効率化する [俺の備忘録]

    Google+ボタン はてなブックマークボタン 更新日時: 2014年01月26日(日) 作成日時: 2013年12月04日(水) 前の記事 / 次の記事 includesを使うことで関連先のオブジェクトも同時に取得することができる。 class User < ActiveRecord::Base has_many: articles end class Article < ActiveRecord::Base belongs_to :user end な時に、コレクションをeachして処理する場合で次のような記述をした場合、 article は繰り返しの度に @articles のキャッシュが再利用されるが、 user は毎回SQLを発行して取得される。 -#haml - @articles.each do |article| %dl %dt タイトル %dd=article.name

    d_animal141
    d_animal141 2014/06/28
    Railsでincludesを使ってSQLを効率化する
  • Railsの複数一意制約について / チュパカブラの勉強日記

    8月 6th, 2012 • rails 複数一意制約とは、複数のカラムでセットでユニークにすること。 例えば、ユーザーの名前とアドレスをセットにして、名前とアドレスのセットでだぶったら、重複としてエラーをおこす。 名前とアドレスが(”佐藤”,”sato@mail”)というユーザーがデータベースに登録されていたとすると、 (”佐藤”,”sato@mail”)はもう登録できないが、(”鈴木”,”sato@mail”)や(”佐藤”,”suzuki@mail”)は登録できる。 ユニーク制約も使われるが、複数一意制約は結構使われる。 複数一意制約の場合も、Railsとデータベース側どっちもやったほうがいい。どっちもやれば強固なものになる。 まず、Rails側での複数一意制約のやり方は、バリデーションでおこなう。 ユーザーモデルがあり、nameとemailの2つのカラムに複数一意制約をつけるとする

    d_animal141
    d_animal141 2014/05/15
    Railsの複数一意制約について / チュパカブラの勉強日記