タグ

SQLに関するfuyu77のブックマーク (97)

  • SQLは滅ぶべきか|ミック

    でかい釣り針が来たので釣られてみる。とりあえず以下の資料を読んでいただきたい。そんなに長くないのでサクッと読める。 SQLの記述順序と思考の順序が違うので書きにくいし、エディタの補完機能の恩恵が受けられないのが嫌だ、という意見はもう大昔からある。何度も何度も何度も繰り返されてきた議論である。以下の2011年のスレッドでも「SQLはFROM句が最初に来るべきではないか?」という問いが提起されている。すぐに出てこないが、筆者はこれより古い文書も見た記憶がある。

    SQLは滅ぶべきか|ミック
    fuyu77
    fuyu77 2024/05/08
  • SQLの実行計画の読み方 |

    今回は、SQLを書く上で特にパフォーマンスに影響のあるSQLの実行計画の読み方について解説します。実行計画はデータベース製品によってさまざまに差異がありますが、ここでは比較的どのデータベース製品でも共通する内容について解説します。 実行計画とは記述したSQLが実際にデータベースの内部でどのように処理されて結果を返すか、その処理方法を記述した情報です。 A5:SQL Mk-2では、SQLエディタで実行計画を見たい SQL の上にキャレットがある状態でメニューから [SQL(S)] – [SQLの実行計画(J)] または、Ctrl+E で表示できます。 表示の仕方はデータベース製品ごとに異なりますが、多くのデータベース製品ではツリー状の情報として表現されます。(このため A5:SQL Mk-2でもツリービューで実行計画を表示します。) ツリーのリーフ(端)から処理が行われ、ルート(根)に向かっ

    fuyu77
    fuyu77 2023/05/06
  • プロダクト改善を支えるため商品データベースを分割している話 - DMM inside

    Dagger Go SDK vs Shell in GitHub Actions ~ モノレポのCIの実装をGoで実装するまでの道のり ~

    プロダクト改善を支えるため商品データベースを分割している話 - DMM inside
    fuyu77
    fuyu77 2022/11/11
  • 1文字でSQLを200倍遅くする方法

    こんにちは、19のSysAd班の翠(sappi_red)です。普段はtraQのフロントエンドの保守を行ったりしています。 こんばんは、19のSysAd班のtemmaです。普段は普段どおりのことをしています。この記事の面白い部分はすべて僕が書いています。面白くないところは翠君が書いています。 この記事では、日々パフォーマンスに頭を悩ませる開発者の方のために、ワンタッチで劇遅SQLを200倍高速でキュートなSQLに劇的ビフォーアフターする方法を紹介します。 「おいおいおい、遅くしたくて記事を読み始めたのに話が違うじゃないか💢」と思ってるそこのあなた👈 早くできるということは遅くもできるんですね。 TL;DR ここにテーブルがあります。 CREATE TABLE messages ( id CHAR(36) NOT NULL PRIMARY KEY, text TEXT COLLATE ut

    1文字でSQLを200倍遅くする方法
    fuyu77
    fuyu77 2022/05/17
  • 並べ替えできるデータをデータベースに保存する方法

    システム開発を行っているとよく、クライアントからデータを任意の順番に並び替えたいという要望があります。並び替えを実行するプログラムは、配列の順序を変えるだけなので簡単ですが、その順序をデータベースにどうやって保存するかという点についてはいつも迷ってしまいます。 これには色々なやり方がありますので、まとめてみました。 8つの方法 今回は8つの方法に分けてみましたが、いくつかの方法は組み合わせて使えると思いますし、さらに工夫した方法もあると思います。方法1~6は大きなくくりとしてよく見かけるものです。方法7方法8は私が考えたもので見たことがないし私自身も実装したことが無いのですが、飛躍したアイデアでもないので載せました。 対象のデータベースは主にRDBですが、KVSに向いているかどうかも(良い・普通・悪い)の3段階で書いています。 データ構造と使い方の説明は書いていますが、具体的な実装は書いて

    並べ替えできるデータをデータベースに保存する方法
    fuyu77
    fuyu77 2022/03/11
  • 表示順という属性を別テーブルに分ける - そーだいなるらくがき帳

    最近、この説明を複数回したので記事にする。 要約 普段は 今北産業 派なのだが、3行考えるのが面倒なため、今後は大人の表現を使う。 「今北産業」をスタートアップ語にすると「マジ価値サマリー」になるらしい ちなみにここだけの話ですが、大人語にすると「要約」になります pic.twitter.com/Q8SflvBX7c— ところてん (@tokoroten) 2022年1月24日 画面に表示したい順(以下、表示順)は振る舞いの属性なので分ける 似たような振る舞いに関わる属性は別テーブルにわけると良い 普通に正規化しましょうって話。 表示順をカラムを追加して表現する よくあるテーブルは画面情報と合わせて表示順カラムがあるパターン。 こういうテーブルを作って SELECT * FROM items ORDER BY display_order_number; で表示順に取り出すパターン。 表示順

    表示順という属性を別テーブルに分ける - そーだいなるらくがき帳
    fuyu77
    fuyu77 2022/03/11
  • PostgreSQLのNull許容外部キーの使い所について

    はじめに こんにちは、経営管理クラウドを開発するログラスのエンジニアの@Yuiiitotoです。 会社全体で色々なアドベントカレンダーにお邪魔させていただいております。 今回は、PostgreSQLのAdvent Calendar 2021の1つの記事として出しています。 PostgreSQLのNull許容外部キーの使い所について はじめにいっておくと、弊社ログラスではNull許容外部キーについてはよく使っています。 使い所は基的に 0..1対0..N の関係性のときです。 は野良がいるので飼い主がない場合があります。その場合、は飼い主IDを持っていません。 飼い主はを複数飼うことができます。またを飼っていない飼い主もいます。 このときcatsテーブルのowener_id(飼い主ID)をnullbleにすることで飼い主のいない(野良)を表現することが可能です。 この場合のテ

    PostgreSQLのNull許容外部キーの使い所について
    fuyu77
    fuyu77 2022/02/15
  • Oracle INDEXを追加したときUPDATEとINSERTにどのくらい影響するのか

    「クエリのパフォーマンスを向上させるにはインデックスの作成が効果的である」という対策は、パフォーマンスチューニングを行う段階で必ず候補となる対策手段の一つです。これまでに公開した、「インデックスの作成でSELECT文の返答時間はどれくらい早くなるのか」「続・パーティションの効果を検証する」でも、インデックスの効果を裏打ちする結果が得られました。 では、ただインデックスを必要なクエリ向けに全て作成すればよいのか、という話になると簡単には頷けないのが現状です。「SELECTには目を見張る効果が得られるけど、UPDATEは遅くなるよね。INSERTも遅くなるかもしれないよね。そのあたりの変異が見られないか。」そんな疑問が弊社メンバーから挙がっていましたので、今回はここに焦点を当てていきます。 検証内容 10万件のレコードを持つテーブルを用意します。このテーブルに、下記の作業実施していった際の速度

    Oracle INDEXを追加したときUPDATEとINSERTにどのくらい影響するのか
    fuyu77
    fuyu77 2022/02/09
  • そのクエリ、ちゃんとチューニングされてる?Railsで確認する方法 - Qiita

    user_ids = [1, 2, 3] Posts.where(user_id: user_ids).to_sql => SELECT `posts`.* FROM `posts` WHERE `posts`.`person_id` IN (1, 2, 3) mysql> EXPLAIN SELECT `posts`.* FROM `posts` WHERE `posts`.`person_id` IN (1, 2, 3) +----+-------------+-------------+------+--------------------------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len

    そのクエリ、ちゃんとチューニングされてる?Railsで確認する方法 - Qiita
  • オレ的EXPLAIN技を語っちゃうゾ - Qiita

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

    オレ的EXPLAIN技を語っちゃうゾ - Qiita
    fuyu77
    fuyu77 2021/12/26
  • LaravelでプライマリーキーをUUIDにする | Hypertext Candy

    Laravelでは各テーブルのプライマリーキーがAUTO_INCREMENT、つまり自動連番であることを前提にModelクラスがデフォルト設定されていますが、この設定は簡単にカスタマイズすることができます。 UUIDのメリット はじめに、自動連番ではなくUUIDをプライマリーキーとして使う理由について簡単にコメントします。 自動連番の代わりにUUIDを使うと、複数のデータベースで分散してデータを持つ場合やデータを移行する場合にもプライマリーキーの重複を避けられます。 また、多くの場合URLの一部にIDを使用しますが、私が担当した案件でクライアント様から「IDの予測がつきにくくしてほしい」という要望を受けたこともありますし(/users/123 があるなら122番ユーザーもいるとバレる)、別の案件では新規サービス開発時に「投稿IDが3とかだったらまだ使われてない感が出て格好悪い」と言われたこ

    fuyu77
    fuyu77 2021/09/01
  • 交差テーブルには関連の意味を表す名前をつけよう - Qiita

    問題 多対多の関連を作るときの交差テーブル(中間テーブル、関連テーブルなどとも呼ばれる)にどのような名前をつけていますか? 2つのテーブル名を単純につなげた users_magazines のような命名を見かけますが、これはあまり良い名前ではありません。 実体関連モデル - Wikipedia 実体 (entity) は名詞に対応すると考えることができる。例えば、コンピュータ、従業員、楽曲、数学的定理といった名詞である。 関連 (relationship) は2つの実体間の関係を捉えたものである。関連は2つ以上の名詞句を結び付ける動詞に対応すると考えることができる。例えば、企業とコンピュータの間の「所有する」(owns) という関連、従業員と部門の間の「監督する」(supervises) という関連、アーティストと楽曲の間の「演奏する」(performs) という関連、数学者と定理の間の「

    交差テーブルには関連の意味を表す名前をつけよう - Qiita
    fuyu77
    fuyu77 2021/07/16
  • MySQL実行計画の簡易検査ツールの開発とCIへの組み込み - ZOZO TECH BLOG

    こんにちは、ECプラットフォーム部の権守です。普段はID基盤やAPI Gatewayの開発を行い、ZOZOTOWNのリプレイスに携わっています。 記事では、ID基盤で開発・導入したMySQL実行計画の簡易検査を行うツールを紹介します。 ツール開発の経緯 RDBにおけるテーブル設計は利用するクエリに応じて適切なインデックスを設定するなど専門的な知識を必要とし、設計できる人が限られてきます。しかし、アプリケーション上で利用されるクエリは機能の追加・改修に伴って日々変化していくため、それら全てに目を通し、漏れなく適切な設計することは困難です。そこで、専門的な知識がなくても設計に問題がないかの簡易的な検査を行えるツールを開発し、CIに組み込むことで自動的に問題を検出できるようにしました。 ツール開発のアプローチ ID基盤ではDBMSとしてAmazon Aurora MySQLを使用しています。そ

    MySQL実行計画の簡易検査ツールの開発とCIへの組み込み - ZOZO TECH BLOG
    fuyu77
    fuyu77 2021/06/30
  • 開発者が知っておきたいSQLの実行モデル~アプリからデータベースへのアクセスを高速化するには?

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

    開発者が知っておきたいSQLの実行モデル~アプリからデータベースへのアクセスを高速化するには?
    fuyu77
    fuyu77 2021/06/22
  • 社内SQL研修のために作った資料を公開します | 株式会社AI Shift

    こんにちは、Development Teamの三宅です。 先日、社内(AI事業部内)でSQL研修の講師を担当したので、今回はその内容について簡単に共有したいと思います。 はじめに 例年、AI事業部では、新卒エンジニアの育成のためにソフトウェアエンジニア研修を行っております。今年はフルリモートでの実施となりました。研修期間は2週間ほどで、内容は前半が講義、後半が実践(チーム開発)でした。私が担当したのは、講義パートの一部であるSQL研修です。SQLRDBにあまり慣れていない人でも、できるだけ体系的な学びが得られるようにすることを目標に、様々な資料をまとめて提供する方針で準備しました。結果的には、ハンズオン込みで4時間ほどのやや長い講義となりましたが、勉強になったという声も頂けたのでやって良かったと思っています。 研修資料 研修内容 SQL研修の内容は、基的には大学のデータベース講義で

    社内SQL研修のために作った資料を公開します | 株式会社AI Shift
    fuyu77
    fuyu77 2021/06/22
  • SQLiteが「大量の小さなクエリ」の処理を得意とする理由とは?

    MySQLやPostgreSQLといったクライアント・サーバー型のデータベースで大量のクエリを発行すると、クライアントとサーバー間の通信が大きなボトルネックとなることがあります。一方、軽量データベースのSQLiteは、その設計上「大量の小さなクエリ」の処理が得意であるとのこと。なぜSQLiteが効率的に大量のクエリを処理できるのかについて、SQLiteが説明しています。 Many Small Queries Are Efficient In SQLite https://sqlite.org/np1queryprob.html SQLiteの利用方法を記したページによると、SQLiteでは1つのウェブページにつき200クエリが適切であるとのこと。この記述について、開発者からしばしば「1つのページにつき200クエリなんて、ばかげている」と指摘されることがあるそうです。 SQLiteは開発者か

    SQLiteが「大量の小さなクエリ」の処理を得意とする理由とは?
    fuyu77
    fuyu77 2021/03/31
  • Webアプリケーションのパフォーマンス勉強会を開催しました! - ANDPAD Tech Blog

    はじめまして、サーバサイドエンジニアの立木です。 特定業種向けポータルサイトやスマートフォンゲーム開発などを経て、昨年3月に入社し、現在はANDPADの開発に従事しています。 アンドパッドでは、技術顧問をして頂いてる三谷(mita2)さんによる、データベースに関する勉強会が定期的に行われております。 tech.andpad.co.jp 先日もデータベースの観点から、Webアプリケーションのパフォーマンスをいかにして監視し、改善していくかという勉強会を開催していただきました。 今回はその勉強会について気になったポイントをまとめてみたいと思います。 当日の資料 概要 ANDPADの現状について分析 Datadogによる分析手法 よくある改善パターン 質疑応答 ANDPADの現状について分析 Webサイトのパフォーマンスは大事当たり前ですが、Webサイトにとってパフォーマンスはとても重要です。

    Webアプリケーションのパフォーマンス勉強会を開催しました! - ANDPAD Tech Blog
    fuyu77
    fuyu77 2021/02/13
  • SQL勉強会を通して痛感したデータ民主化への長い道のり - Classi開発者ブログ

    こんにちは、ClassiデータAI部の石井です。 私は2019年4月にソフトバンクからClassiに出向し、マーケティング部を経て、現在データAI部でデータエンジニアとして分析基盤の構築を担当しています。今回は私が現部署で最初に担当したSQL勉強会についてご紹介します。 背景 2020年春頃から、新型コロナウイルスの影響による休校や教育現場の急激な状況変化に対応するため、Classiサービスの詳細な利用状況把握の必要性が高まっています。 Classiは弊社の強みともいえる膨大な教育データを蓄積していますが、残念なことに全社的には貴重な教育データを活用しきれていないことが課題でした。 2020年夏に全社で行った「データAI部に期待すること」に関するアンケートでも、「基礎的なデータ活用方法を教えてほしい」という回答が多く寄せられました。 この状況をふまえ、データ活用のための知識の底上げを行い、

    SQL勉強会を通して痛感したデータ民主化への長い道のり - Classi開発者ブログ
    fuyu77
    fuyu77 2021/02/13
  • GoでSQLにトレーシングコメントを埋め込んで実行する | おそらくはそれさえも平凡な日々

    アプリケーションが発行するSQLにコメントが埋め込めると便利です。例えば、 /* path/to/logic.go:334 */ SELECT ... のようにSQLに発行元の情報をコメントとして埋め込んでからExecすれば、DB側のログ(general log等)にも記録されるため、SREやDREサイドからも、負荷の高いSQLがアプリケーションのどこから発行されているかが分かりやすくなります。 Goには github.com/shogo82148/go-sql-proxy という、SQL実行をトレースし、フック処理を差し込める便利なライブラリがありますが、今回それにpull requestを送って、SQL実行前にクエリの書き換えができるようにしました。 https://github.com/shogo82148/go-sql-proxy/pull/61 https://github.co

    GoでSQLにトレーシングコメントを埋め込んで実行する | おそらくはそれさえも平凡な日々
    fuyu77
    fuyu77 2021/02/03
  • 「分析SQLスタイルガイド」をかなり真面目に考えた - Qiita

    目次 なぜSQLのスタイルガイドが重要なのか この記事の目的 この記事の対象者 分析SQLスタイルガイドの指針 基ルール 命名規則 インデントルール 別名ルール joinルール クエリ分割ルール ⭐ コメント欄で「いや私はこう思う!」という意見をたくさんいただきました!ぜひそちらも御覧ください!(決して揶揄ではないです) なぜSQLのスタイルガイドが重要なのか SQLはプログラミング未経験者でもとっつきやすい言語と言われ、エンジニアや分析を業としていない人でもSQLを使う機会が増えてきていると思います。 そんなSQLですが、こちらのブログでも指摘されている通り、一般的なスタイルガイドが定まっていません。スタイルガイドとはコードの書き方マナーようなもので、どこで改行するか、空白はいくつ入れるか、大文字を使うかなどの諸々を指します。 もしスタイルガイドが無いとこんな事が起こります コードに

    「分析SQLスタイルガイド」をかなり真面目に考えた - Qiita
    fuyu77
    fuyu77 2021/01/13