タグ

sqlに関するd_animal141のブックマーク (110)

  • RailsのArelを調査してみた - Qiita

    RailsのActiveRecordで想定通りのSQLクエリが発行されずに辛い思いをしたので、SQLまわりのソースコードを読んでいたらArelというものに当たりました。 どうやらこれがrailsっぽくSQLクエリを書ける機能を提供しているようなので、勉強したことをまとめます。あまり細かいことは気にせずに、Arelを読み解く上での基礎を理解することが目標です。 ソースコードをちゃんと読んだ経験が少ないのでとんちんかんなこと書いてないか不安ですが、温かい目で見てもらえればと思います。 間違っている箇所あればコメント欄よりお願いします。 Arelとは ArelはActiveRecordの内側でwhereやselectのメソッドチェーンからSQLを生成する役割を担っています。またDBによってSQLの文法が若干違ったりしますが、その差異を吸収してくれるのもArelです。 rubygemsによるとAr

    RailsのArelを調査してみた - Qiita
  • ActiveRecordに限界を感じArelでサブクエリを頑張って書いてみた - Qiita

    はじめに railsを触り始めて4ヶ月が経ち、「ActiveRecordってSQLを知らなくても書けるってすごいなぁ」 と思っていた自分に変化が訪れました。その変化とは、「何でActiveRecordって全部纏めちゃうんだよ。。。」 という気持ちが芽生えたことです。 今私が扱っている案件では、「複数のテーブルから、ある条件のレコードの件数を、タイムアウトなしで取得したい」 という状態になっています。 一例ではありますが、以下のようなサブクエリを使用しないscopeを複数チェーンして、各条件の件数を取得していました。 scope :select_page_views_count, -> do left_joins(:page_views) .select("COUNT(DISTINCT page_views.id) AS page_views_count") .group("#{table_

    ActiveRecordに限界を感じArelでサブクエリを頑張って書いてみた - Qiita
  • SQLフォーマッターFor WEB

    今まで通りSQLの整形にお役立てください。 バージョンアップした際はページでお知らせしたいと思います。 2021/3/21追記 ・==が1トークンになるよう修正 ・[table]![column]が崩れないよう修正 ・cross join が崩れないよう修正 2019/7/1追記 ・カンマ整形前の場合にorder byはgroup byで桁ぞろえが有効にならないバグを修正 ・カンマ整形前の場合に、limit 1, 10が limit 1 , 10となるバグを修正 2018/8/28追記 ・ie11でlocalStorageが動作しなかったバグを修正 2018/8/27追記 ・localStorageに整形書式を保存するよう対応 2018/8/4追記 ・カンマ整形が前の場合、「桁ぞろえ」オプションを追加 コア部分に手を入れたため、おかしな動作をした場合はお知らせください。 2018/5/1

    SQLフォーマッターFor WEB
  • ActiveRecord の or は merge とセットで使え - Qiita

    Model.where(A) .merge(Model.where(B).or(Model.where(C)).or(Model.where(D))) .merge(Model.where(E).or(Model.where(F))) merge() を使うと、 or() の部分をグルーピングすることができます。 SQLの条件組み立ては and で条件を絞り込んでいくのが基ですから、 or の部分はまとめて and でつないでいきましょう。 or() はどこでグルーピングがどこに入るのか予測不可能なことが多いですが、merge() と併用するとグルーピングを明示的に制御できるようになります。

    ActiveRecord の or は merge とセットで使え - Qiita
  • ActiveRecordの #or を使うときは、こう考えると良さそう - nisshieeのブログ

    Rails5で追加された #or について。 (どうでもいいけど、このメソッド、ググラビリティ低すぎぃ) 社内で話してたら、Twitterで会話されてた。 @kamipo https://t.co/UQaAbt7M7T これrails 5.1でも .or(where(...)) が括弧で囲まれないんだけどバグちゃうの?— FUJI Goro (@__gfx__) 2017年7月3日 つまりこう考えれば良いということか。 ↓ 「whereを AND だと思ったうえで、メソッドのチェーン順に従う。」 と思えば良いのか。 Model .where(A) .where(B).or(C) は改行のせいでgroupingが存在している気になるけど、字句解析結果は結局のところこう↓ Model.where(A).where(B).or(C) これを、チェーン順に解釈すれば確かに A and B or C

    ActiveRecordの #or を使うときは、こう考えると良さそう - nisshieeのブログ
  • Ruby on Rails で NOT IN な SQL をかく。 | そんなこと覚えてない

    Rails 4 で NOT な条件をもつ WHERE 句 が非常に書きやすくなりました。 Rails 4 なら NOT IN な SQL も簡単に書けます。 User.where.not( name: ["hoge","goro"] ) 条件にリストを渡せばよいです。SQLは以下のようになります。 SELECT "users".* FROM "users" WHERE ("users"."name" NOT IN ('hoge', 'goro')) サブクエリも使えます。これが便利すぎて困る。 query = User.select(:name) User.where.not name: query SELECT "users".* FROM "users" WHERE ("users"."name" NOT IN (SELECT name FROM "users")) Rails 3 の

  • How to Create Postgres Indexes Concurrently in ActiveRecord Migrations

    How to Create Postgres Indexes Concurrently in ActiveRecord Migrations
  • テキスト検索の方法とインデックス | Let's POSTGRES

    板垣 貴裕 テキスト検索にもさまざまな方法があります。大量のテキストを検索するにはインデックスを使って検索したいところですが、どんな検索にも応えられるインデックスというものは、さすがに存在しません。それぞれのアプリケーションの条件に適したテキスト検索方法やインデックスの張り方を選んで行きましょう。 今回説明するテキスト検索の方法の一覧を以下に挙げます。PostgreSQL ユーザが「全文テキスト検索」というと「単語単位の検索」を指すことが多いようです。また、「中間一致検索」が「あいまい検索」と呼ばれることもあるようです。用語が厳密な意味で使われないことも多いようなので、文脈には注意して解釈してください。 「単語単位の検索」と「中間一致検索」では、追加のモジュールを導入することで日語全文検索が可能なインデックスを作成できます。こちらは説明の後半で紹介します。以下、記事の内容です。 テキス

  • [MySQL]WHERE句でLIKEを使っている場合のINDEX

    テスト用のテーブルを用意まずはテスト用テーブルを用意する。 mysql> create table sample(id int auto_increment primary key, name varchar(10)); Query OK, 0 rows affected (0.02 sec) mysql> desc sample; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | na

    [MySQL]WHERE句でLIKEを使っている場合のINDEX
  • インデックスが使えない検索条件 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    インデックスが使えない検索条件 - Qiita
  • SQLにおける複合INDEXの順番について - Qiita

    更新履歴 2019/09/07:INDEXについての説明を修正しました はじめに SQLのチューニングについて勉強していたら「これは意識しないとな」というものがあったので書き留めたいと思います。 要約 複合INDEXを貼る場合はSQLの評価順序を意識して貼らないとダメみたいです。 そもそもINDEXとは DBを触っていればINDEXについてはみなさんご存知だと思いますが、ご存じでなければ以下のページが参考になるかもしれません。 MySQLでインデックスを貼る時に読みたいページまとめ(初心者向け) 簡潔に言えば、検索する際に高速化のために使うもので、カラム(列)に対して貼るものです。厳密なところは私も把握しきれてないと思いますので言及は避けたいと思います(すみません)。 なんでINDEXを使うと検索が速くなるのか(論から逸れます) これも厳密なところは他の書籍や記事に譲ります(すみません)

    SQLにおける複合INDEXの順番について - Qiita
  • ActiveRecord の with_lock に先人の知恵を学ぶ - Qiita

    はじめに 先日、ActiveRecord の with_lock (lock!) を調べていた時に良くできているなあ、勉強になるなあと思ったので、その辺のことを書いてみたいと思います。 なお、以下の内容は、Rails 5.2.2 及び、PostgreSQL 10.7を前提にしていることをお断りしておきます。 with_lock とは Rails Guide の Pessimistic Locking に with_lock を使ったサンプルコードが登場します。要は、データ更新時に悲観的ロックをかけてくれるというものです。 SQLレベルでざっくりいうと、 SELECT ... FOR UPDATE をしてから UPDATE できるようになるということですね。 ただ、with_lock の前にモデルが変更されていた場合、どうなるのかちょっと気になりましたので、APIを調べてみました。 コードレ

    ActiveRecord の with_lock に先人の知恵を学ぶ - Qiita
  • SQLファイルによるRails DBスキーマ管理

    Railsではdb:migrateすると、デフォルトでdb/schema.rbを生成しますが、SQLでスキーマ情報を管理することも可能です。下記のようにconfig/application.rb内でactive_record.schema_formatを:sqlと設定することで可能になります(デフォルト値は:ruby)。 # config/application.rb module RailsApp class Application < Rails::Application config.active_record.schema_format = :sql end end これでdb/migrateするとデフォルトのschema.rbではなく、db/structure.sqlというSQLファイルを吐きます。 structure.sqlをロードする生成されたstructure.sqlファイ

    SQLファイルによるRails DBスキーマ管理
  • PostgreSQLの実行計画について調べてみた | Casley Deep Innovations株式会社 技術ブログ

    はじめに 初めまして、キャスレーコンサルティング SI(システム・インテグレーション)部の松です。 業界3年目にして、実行計画を一度も見たことがなかった私が、 「実行計画とは何か、どのように取得するのか。」について調べた結果をまとめました。 ※ブログでは、PostgreSQL Tutorialより提供されているdvdrentalというDBをサンプルに用いております。 目次 1.実行計画とは 2.実行計画の取得方法 2.1.EXPLAIN文 2.2.オプション(ANALYZE,FORMAT) 2.3.ANALYZE文 3.実行計画の構造 3.1.ノードのツリー構造について 3.1.1.テーブルスキャンノード 3.1.2.結合系ノード 3.1.3.その他のノード 3.2.処理コストの確認方法 4.まとめ 1.実行計画とは 実行計画とは、ユーザによって発行されたクエリを実行するための手順書の

    PostgreSQLの実行計画について調べてみた | Casley Deep Innovations株式会社 技術ブログ
  • プライマリキーとインデックスの違い - bi_naの日記

    DBのインデックスへの混乱 インデックスを作ると、検索が早くなる。 つまりWHEREの条件にインデックスを作ったカラム名を書くと早くなるというのは 知っていたのだが、プライマリキーだけ作って、インデックスは作らないときなどが あったのでどういうこと?と思って調べてみた。 プライマリキーとインデックスの違い 参考 http://oshiete1.watch.impress.co.jp/qa4401156.html ずばりここに書かれており、 DB全般でほぼ同じような仕組みになっていると思われる。 引用1 SQL Serverに限らず、RDBMS全般として回答します。 主キーやuniqueキーを表定義で指定すると、「内部的に重複禁止のインデクスが作成」されます。 これは、RDBMS側で重複チェックする上で、重複禁止のインデクスがないと、母体の全件サーチが必要になるからです。 インデクスは、重複

    プライマリキーとインデックスの違い - bi_naの日記
  • ゲームを題材に学ぶ 内部構造から理解するMySQL 記事一覧 | gihyo.jp

    運営元のロゴ Copyright © 2007-2024 All Rights Reserved by Gijutsu-Hyoron Co., Ltd. ページ内容の全部あるいは一部を無断で利用することを禁止します⁠。個別にライセンスが設定されている記事等はそのライセンスに従います。

    ゲームを題材に学ぶ 内部構造から理解するMySQL 記事一覧 | gihyo.jp
  • NoSQLとは?リレーショナルデータベース(RDB)との違いを徹底比較

    更新日: 2017年03月14日公開日: 2016年07月25日NoSQLとは?リレーショナルデータベース(RDB)との違いを徹底比較 NoSQLという言葉をご存知でしょうか? ビッグデータ、IoT、SNSなどの流行とともに、データベースの世界でもリレーショナルデータベース(RDB)に代わるこの概念が普及しつつあります。NoSQLは変化する時代に柔軟に対応するデータベースといえるかもしれません。 そうはいってもデータベースは難しい!…と感じるかもしれない皆さんに、RDBMSとNoSQLの違いをとても簡単に解説します。 NoSQLという言葉をご存知でしょうか?ビッグデータ、IoT、SNSなどの流行とともに、データベースの世界でもリレーショナルデータベース(RDB)に代わるこの概念が普及しつつあります。NoSQLは変化する時代に柔軟に対応するデータベースといえるかもしれません。 そうはいっても

    NoSQLとは?リレーショナルデータベース(RDB)との違いを徹底比較
  • MongoDBの様なNoSQLに勢いがあるのは何故ですか?SQLと比べてどんな利点や欠点がありますか? - Quora

    回答 (3件中の1件目) ハイプサイクルという概念をGartnerグループが提唱してまして、様々な流行りスタリのサイクルを分析する標準的な方法となっています。 ハイプとは過度な期待や熱狂を意味する言葉です。一発屋芸人の人気のカーブみたいなもので、テツandトモみたいに安定する場合と、消えていくものがあります。芸人ではありませんがDA PUMPは一茶の人間性もありまして、次は厳しいけど定着すると思っています。 なんだかのトリガーで評価が上がり始め、ピークを迎える。その後評価が下がっていき、底を打つと少し上がって定着するという経過をたどるとしています。これと同じモデルで、流行りのハイテク...

    MongoDBの様なNoSQLに勢いがあるのは何故ですか?SQLと比べてどんな利点や欠点がありますか? - Quora
  • 自己結合とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

    1つ目のテーブル(テーブル1)には「名前」と「性別」があります。 2つ目のテーブル(テーブル2)には「名前」と「年齢」があります。 「名前」に注目すると、何となく合体できそうな気がしませんか? 実際問題、合体できます。 合体させることによって、例えば「名前」と「性別」と「年齢」があるテーブルを新たに作ったりできますよ。 このときの合体のさせ方には、いくつかのやり方があります。 一般的なのは 1.内部結合(INNER JOIN):2つのテーブルの合体可能なデータのみ取り出すやり方 2.左外部結合(LEFT OUTER JOIN):テーブル1の全データを取り出して、それにテーブル2のデータをくっつけるやり方 3.右外部結合(RIGHT OUTER JOIN):テーブル2の全データを取り出して、それにテーブル1のデータをくっつけるやり方 4.完全外部結合(FULL OUTER JOIN):両方の

    自己結合とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
  • [SQL] 6. テーブルの結合 3

    6.2. 自己結合 自己結合とは同じテーブル同士の結合のことをいいます。結合は 2つ以上のテーブルに対して行われますが、それらが別のテーブルである必要はありません。自己結合は 2つのまったく同じテーブルの結合として実行されます。 テーブルの自己結合を行う際に問題なのは、テーブルの名前も列の名前も全て同じだという点です。これを解決するために、テーブルに一時的な名前を付けます。この一時的な名前のことをエイリアスといいます。範囲変数または相関変数とも呼びます。sample.17-3 は、商品表の単価が同じである商品名と単価を表示するものです。 -- sample.17-3 -- /* テーブルの結合 */ SELECT A.商品名,A.単価 FROM 商品表 A,商品表 B WHERE A.単価 = B.単価 AND A.商品コード <> B.商品コード ; /* 実行結果 */ 商品名 単価