タグ

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

  • NULL撲滅委員会

    序文 全国1千万の DB エンジニアの皆様、こんにちは。NULL撲滅委員会極東支部長のミックです。皆様におかれましては日々、DB の構築、SQL 作成、パフォーマンス・チューニング、番データの入ったテーブルをいともあっさり DROP した新入社員の尻拭いと、獅子奮迅の働きにてチームを支えておられるであろうと存じます。さて、日私が一筆啓上しましたのは、NULL撲滅基宣言への皆様の参加を募りたく思ったからです。 NULL というこの面妖な怪物の質の悪いところは、最初は私たちの感覚に心地よく合致すると感じられるため、ごく自然にするっとシステム設計の中に忍び込んできて、気が付いたときにはシステムをどうしようもなく複雑で、非効率的で、直観に反する動作をするに至らしめ、開発も運用も困難なものにしてしまうところにあります。ゆえに、NULL のもたらす脅威から身を守るには、まず第一にその正体をよく知

  • オレ的EXPLAIN技を語っちゃうゾ - Qiita

    メリークリスマス 記事はPostgreSQL Advent Calendar 2021の25日目です。今年も面白い記事がたくさん揃いましたね!!! さて、みなさん今年のPostgreSQLライフはどんな感じでしたでしょうか? 私はというと、なんだかチューニングばっかりやってました。1案件でいろいろお手伝いすることはまあまああったのですが、複数から次々チューニングの相談をもらって、歴代継承者の個性を発現したデクくんのごとく駆け回ったのが今年のハイライトです。 (この綱渡り感、、、伝われ!!!) 俺たちは雰囲気でチューニングしている 今回上手くいったけど、あの時たまたまひらめいた1案をぶつけてみたら効果でたのであって、次善の策なんてなかったけど??って毎回思ってるから、雰囲気でやっていると思う、マジで。コミュニティのノリだと笑いが起きていいんですけど、少しでも勝率を上げるために、若手の前でド

    オレ的EXPLAIN技を語っちゃうゾ - Qiita
  • SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ

    TIGの辻です。GoのORマッパー連載8日目です。記事では sqlc を紹介します。早速ですが、結論から行きましょう。 sqlc まとめ SQLファイルからデータベースにアクセスできる型安全なGoのコードを生成するライブラリ 構造体のモデルの手書き実装不要 複数テーブルをJOINしたときのマッパー実装不要 生成されるコードは不要なリフレクションなし SQLをがんがん書きたい、でも面倒なマッパー構造体は書きたくない、という開発者にとっては大きな味方になります。 sqlc の紹介 sqlc はSQLファイルからGoのアプリケーションコードを生成するライブラリです。2020/2に v1.0.0 をリリースし、着々とスターを伸ばしています。2021/08現在は v1.8.0 をリリースしています。資料で生成しているコードも v1.8.0 を用いています。 https://star-histor

    SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ
  • Go の sql.DB がコネクションプールを管理する仕組み

    Godatabase/sql パッケージ の DB 構造体 は、データベースへのコネクションプールを管理し、かつスレッドセーフ (goroutine セーフと言ったほうが良いのだろうか…?) にそれらの接続を使用できることを保証している。 ドキュメント にも次のように書かれている。 DB is a database handle representing a pool of zero or more underlying connections. It’s safe for concurrent use by multiple goroutines. こちらの基的な実装内容と、動作を制御するパラメータについて調べてみた。 基礎知識のおさらい database/sql パッケージはデータストアの実装によらない一般的な SQL のインタフェースを提供している。具体的なデータストアへの接

    Go の sql.DB がコネクションプールを管理する仕組み
  • 開発者が知っておきたいSQLの実行モデル~アプリからデータベースへのアクセスを高速化するには?

    データベースのデータ・モデルは解決したい問題に合わせて使い分けることができ、昨今ではドキュメントやグラフなどのリレーショナル以外のモデルも注目されています。また、トランザクション系が生成した大量のデータをリアルタイムで分析するというような、性質の異なるワークロードを扱うことも求められています。これら性質の異なるデータ・モデルやワークロードを扱うにはどのような実装が必要でしょうか。この連載では、開発者の皆様がシステム・アーキテクチャやアプリケーション・コードをより洗練させるのに役立つデータベース・マネジメント・システム(DBMS)の基を振り返り、実装に合った技術の組み合わせを解説します。 第1回はデータベースにアクセスするAPIで最も広く使われているSQLという言語の実行モデルを再確認します。なぜこの言語がリレーショナル・モデルのみならず他のデータ・モデルに対しての操作にも使われるようにな

    開発者が知っておきたいSQLの実行モデル~アプリからデータベースへのアクセスを高速化するには?
  • 楽々ERDレッスンを読んだ - patorashのブログ

    TLで良書だというのをチラホラと見かけていたのだけれど、結構古いなので迷っていたのだが、今でも通用しそうな内容っぽいので買って読んでみた。 TLで見かけてた、楽々ERDレッスンを手にいれたので読んでいく。 pic.twitter.com/f7WEl6mHft— パトラッシュ@エキスパート職 (@patorash) 2021年2月1日 感想から書くと、これもまた「UNIXという考え方」と同じで、もっと若いうちに読みたいだった…😇 このの内容を知っていれば、データベース設計で悩むことも相当減っていたと思うし、プログラムで苦しむことも減っていたと思う。つまり、このは「買い」です。かなりお薦めできる。もう読んでいる途中から社内のTeamsでは良書だと言いまくった。めちゃめちゃプッシュしたからか、後輩の何人かも買ってくれたみたいだった😋 ちなみに「UNIXという考え方」の感想はこちら。

    楽々ERDレッスンを読んだ - patorashのブログ
  • SQLアンチパターンを読んで (ポリモーフィック関連について)

    様々なところで名著と言われている”SQLアンチパターン”を最近読みました。このにはデータベース設計やクエリなどでやりがちな様々な間違い(アンチパターン)が載っています。今回は私も身に覚えがあるアンチパターン:ポリモーフィック関連について紹介したいと思います。 SQLアンチパターン ポリモーフィック関連 ポリモーフィック関連とはある一つのカラムが複数のテーブルを参照しているようなパターンです。 例えば管理ユーザテーブル(admin_users)と一般ユーザテーブル(users)によってユーザを管理している時に、それらのユーザのログをユーザログテーブル(user_logs)でまとめて記録したい場合にポリモーフィック関連を使う可能性が出てきます。 図にあるようにuser_logsテーブルはadmin_usersとusersテーブルをusers_idによって参照しており、どちらに参照するかはus

    SQLアンチパターンを読んで (ポリモーフィック関連について)
  • Using filesort

    去年ソートに関する記事を書いたが、今日はその続きである。 MySQLでEXPLAIN SELECT...を実行するとExtraフィールドでよく見かける「Using filesort」という文字列。Filesortって一体なんだろう?と思ったことはないだろうか。単刀直入に言ってFilesortの正体はクイックソートである。 クエリにORDER BYが含まれる場合、MySQLはある程度の大きさまでは全てメモリ内でクイックソートを処理する。ある程度の大きさとはsort_buffer_sizeであり、これはセッションごとに変更可能である。ソートに必要なメモリがsort_buffer_sizeより大きくなると、テンポラリファイル(テンポラリテーブルではない)が作成され、メモリとファイルを併用してクイックソートが実行される。 Filesortは全てのソート処理において実行されるわけではない。前回の記事

    Using filesort
  • ぐるぐるSQLは止めてくださいという話 - Qiita

    1. はじめに 仕事の都合で DB/SQL の性能問題を調査する機会が少なくありませんが(決してメインの仕事ではないですが)、その中でよく出くわす問題の1つに「ぐるぐるSQL」(もしくは「ぐるぐる系」)といわれる、ループで大量の SQL 文を呼び出しているものがあります。 感覚ですが、私の周りでは OLTP 系システムの DB/SQL の性能問題の原因の割合は以下のように感じています。 30%:ぐるぐる SQL 20%:SQL 文の書き方が不適切 15%:索引がない or 不適切 15%:パーズが遅い 10%:データモデルがおかしい 10%:その他 (大昔は2番目 / 3番目がほとんどだったのですが、最近はなぜがぐるぐる SQL が多い…) ぐるぐる SQL の実装では、ネットワーク通信や、アプリ側のクエリ生成 / 結果データ構築、DB 側のクエリ受信 / 結果送信といった、処理の質的で

    ぐるぐるSQLは止めてくださいという話 - Qiita
  • 「SQLアンチパターン」を避けるためのチェックリスト①(DB論理設計編) - log4ketancho

    ずっと前から積ん読状態だった「SQLアンチパターン」を読みました。 何年積んでたか分からないSQLアンチパターン読み終わったー。噂に違わずいいですねー。もっと早く読むべきだった。— @ketancho (@ketancho) 2018年3月6日 噂通りとても良いで、まさに「エンジニアとしての血肉」と言えます。1, 2年目の頃に読んでおくべきだったなーと少し後悔しています。 SQLアンチパターン 作者: Bill Karwin,和田卓人,和田省二,児島修出版社/メーカー: オライリージャパン発売日: 2013/01/26メディア: 大型購入: 9人 クリック: 698回この商品を含むブログ (46件) を見る 読んで終わりだと身につかないと思うので、自分なりのチェックポイントを言語化しておこうと思います。長くなってしまったので、章ごとに4つに分けたいと思います。この記事はその第一弾と

    「SQLアンチパターン」を避けるためのチェックリスト①(DB論理設計編) - log4ketancho
  • 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
  • How to Create Postgres Indexes Concurrently in ActiveRecord Migrations

    How to Create Postgres Indexes Concurrently in ActiveRecord Migrations
  • SQLにおける複合INDEXの順番について - Qiita

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

    SQLにおける複合INDEXの順番について - Qiita
  • プライマリキーとインデックスの違い - 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年3月14日公開日: 2016年7月25日NoSQLとは?リレーショナルデータベース(RDB)との違いを徹底比較 NoSQLという言葉をご存知でしょうか? ビッグデータ、IoT、SNSなどの流行とともに、データベースの世界でもリレーショナルデータベース(RDB)に代わるこの概念が普及しつつあります。NoSQLは変化する時代に柔軟に対応するデータベースといえるかもしれません。 そうはいってもデータベースは難しい!…と感じるかもしれない皆さんに、RDBMSとNoSQLの違いをとても簡単に解説します。 NoSQLという言葉をご存知でしょうか?ビッグデータ、IoT、SNSなどの流行とともに、データベースの世界でもリレーショナルデータベース(RDB)に代わるこの概念が普及しつつあります。NoSQLは変化する時代に柔軟に対応するデータベースといえるかもしれません。 そうはいってもデー

    NoSQLとは?リレーショナルデータベース(RDB)との違いを徹底比較
  • Railsのデータロック - Qiita

    begin ActiveRecord::Base.transaction do . . raise 'ロールバックします' end p 'コミット' # トランザクション処理を確定 rescue => e p 'ロールバック' # トランザクション処理を戻す end transactionブロックの中で登録・更新処理を行う場合は、saveやupdateではなく、save!, update!を使用する。 transactionブロックの中で複数のモデルの更新を行った後に例外を発生させると、全部のモデルがロールバックする。 楽観的ロック 「競合は多分起きないだろう」という前提で、データの取得時には何もせず、更新時に競合をチェックする方法。 レコードのバージョン管理を行うため、テーブルにlock_versionカラムを追加する。その際、デフォルト値を0にする。 lock_versionはレコード

    Railsのデータロック - Qiita
  • えっ、まだPostgreSQLでダブルクォーテーション使ってるの? - Qiita

    するとこれ、エラーで返ってきました。 (エラーメッセージはうろ覚えですが「value1なんてカラムは存在しないよ」的なことを言ってました) PostgreSQLでは、ダブルクォーテーション「”」をシングルクォーテーション「'」にしないといけません。なので、以下のように変更します。 「”」と「’」の違い PostgreSQLなどの標準SQLでは、 シングルクォーテーションで囲う:文字列定数として扱う ダブルクォーテーションで囲う:カラム名として扱う という仕様になっている。 'value1'はvalue1という文字列として捉え、"value1"はvalue1というカラムの名前として捉えられます。 テーブルになにか文字列を挿入するときはシングルクォーテーションで囲ってやらないと、SQLが文字列として認識してくれないわけです。 つまり、文字列定数をダブルクォーテーションで囲うな!ということです。

    えっ、まだPostgreSQLでダブルクォーテーション使ってるの? - Qiita
  • データベース用語和英対応表 - Weblog on mebius.tokaichiba.jp

    6~7年前に買ったSQLの入門書を、捨てる前に読み返している。この入門書を使って1回SQLを勉強したのだが、実際に使うことが無かったため、全く身に付かず、歳のせいで記憶にも残っていないのだ。実際、MySQLを触りながら復習しようとして、mysqlを起動すると、"select * from (テーブル名);"以外の文はそらでは全く書けなかった。 従って、SQLの入門書とMySQLのマニュアル(MySQL info)とを見ながらSQLを試しているのだが、SQLの入門書が日語でMySQLのマニュアルが英語であり、筆者にデータベースの基礎知識がないため、日語と英語の対応が取れない用語がいくつか発生した。 そこで、出くわしたデータベース用語の日語と英語の対応表を作ることにした。 日英語

    データベース用語和英対応表 - Weblog on mebius.tokaichiba.jp