タグ

SQLに関するene0kcalのブックマーク (39)

  • 社内SQLチューニングコンテストの開催にあたって得られた知見

    エンジニアの吉田です。 フォルシアにはdevゼミという文化があり、エンジニアが講師となって自身の詳しい分野に関する講義やハンズオンを行っています。 私もこれまでに何度かSQLチューニングを題材としたdevゼミを開講してきましたが、いずれもこちらが一方的に話すという形式に終始しており、実際に受講者が手を動かせる形式での講義も望まれていました。 色々とやり方を模索した結果、コンテスト形式で実際にPostgreSQLのチューニングを行ってもらう、という形の講義を行うことになりました。コンテスト形式での実施にあたりいろいろと工夫した点や学びがあったので、以下にそれらをまとめます。 SQLチューニングをハンズオンすることの難しさ これまでインプット中心の講義を行っていたのは、ひとえに SQLチューニングをハンズオン形式で実施することのハードルが高かった からです。 過去に社内でも何度かチューニングコ

    社内SQLチューニングコンテストの開催にあたって得られた知見
  • 一枚岩の「巨大SQL」から脱却するために。Airペイ新機能のデータ基盤を支える、ニジボックスの技術力 - はてなニュース

    データ活用が事業成長の生命線となる今、データエンジニアに求められる役割は急速に高度化しています。しかし、現場では「なぜそのデータが必要なのか」という背景を知らされないまま、ただSQLを書くだけの“作業者”になってしまっているエンジニアも少なくありません。 今回フォーカスするのは、リクルートの決済サービス『Airペイ』が、2025年3月に追加した新機能『Airペイ オンライン決済(以下、オンライン決済)』に向けた、分析用データマートの開発プロジェクト。 このプロジェクトでは、リクルートが設計や要件定義を担い、リクルートグループの一員であるニジボックスが実装を担いました。両社のエンジニアは既存サービスとの整合を図りながら、モダンなシステム開発に則った技術スタックおよび手法を導入して、実装に漕ぎ着けました。 リクルートとニジボックス、組織の枠を超えて「ワンチーム」で課題に挑んだBIエンジニアたち

    一枚岩の「巨大SQL」から脱却するために。Airペイ新機能のデータ基盤を支える、ニジボックスの技術力 - はてなニュース
    ene0kcal
    ene0kcal 2026/02/27
    データウェアハウスって単語が十数年ぶりに思い出された。
  • 論理削除という技術的負債、それでも僕たちは使い続ける - じゃあ、おうちで学べる

    はじめに 「論理削除?deleted_atカラム追加すればいいでしょ」この一言から始まる地獄を、何度見てきただろうか。 最初は簡単に見える。カラムを1つ追加するだけ。しかし、その「簡単さ」こそが罠だ。 論理削除は技術的負債の温床だ。WHERE句への条件追加忘れ、認知コストの増大、テストの複雑化、パフォーマンス劣化。すべては「最初にドメインを考えなかった」ツケである。 しかし現実として、サービスを運用していくと論理削除が必要になる場面は確実に訪れる。 論理削除の質は、「このレコードは存在するが、存在しないことにしてほしい」という矛盾だ。この矛盾を解消するか、受け入れて安全に管理するか。記事ではその両方のアプローチを解説する。 なお、私はDBのスペシャリストではないので、ここで紹介する方法が唯一の正解というわけではない。あくまで一つのアプローチとして参考にしてほしい。データベース設計は文脈

    論理削除という技術的負債、それでも僕たちは使い続ける - じゃあ、おうちで学べる
    ene0kcal
    ene0kcal 2025/12/25
    削除フラグではなく、ライフタイムにするというのを昔何かで読んだ(見た)気がする。ライフタイムがぴったり合うかどうかにも勿論よるが。
  • SQLアンチパターンを根本から理解する:実務で遭遇した“DBが泣く”5つのNGクエリと改善策 - Qiita

    番環境でデータ量が増えた瞬間、アプリケーションが突然重くなる すべてのエンジニアが一度は直面するこの悪夢。その原因の多くは “気づかぬうちにDBを苦しめているSQL” です。 この記事では、実務で特に被害が大きかった 5つの致命的なSQLアンチパターン と、追加で バッチ処理の最適化(バルクINSERT)、EXISTS vs IN の違い を取り上げ、 なぜ遅くなるのか(原理) どう直すべきか(改善策) どんな落とし穴があるか(トレードオフ) 実務チェックリスト を、技術書レベルでわかりやすく整理します。 目次 インデックスを殺す「関数・演算子」利用 アプリ性能を破壊する「N+1問題」 隠れたパフォーマンスキラー「SELECT *」 前方一致以外の LIKE 検索 バッチ処理最適化:バルクINSERT EXISTS vs IN の違い 補足:EXPLAINを使った実践的な確認フロー 現場

  • TypedSql──C# の型システムをクエリエンジンとして「悪用」してみた話 - Qiita

    0. はじめに TypedSql は、ある日ふと湧いた「ちょっとした不満」から始まりました。 .NET でコードを書いていると、「クエリっぽい処理」を書く場面がよくあります。 例えば、すでにメモリ上にある List<T> や配列をフィルタして、一部の列だけ取り出したいときです。 そのとき、だいたい次の 3 つの選択肢があります。 素直に foreach で回す — 速くて明示的だけど、ちょっとコードがうるさい LINQ(Language Integrated Query)を使う — 書き心地はいいけれど、イテレーターやデリゲートのオーバーヘッドが気になる いっそデータベースに突っ込んで、物の SQL を書く — さすがにやりすぎ感がある 「もう少しだけ“ちょうどいい”選択肢が欲しいな」と思ったところから、TypedSql の実験が始まりました。 そこで出てきたのが、こんな発想です。 C#

    TypedSql──C# の型システムをクエリエンジンとして「悪用」してみた話 - Qiita
  • 今年俺を一番幸せにしたDX最高な奴ら10選

    みなさん、普段から開発者体験(DX)を気にしてますか? DXとは、開発中に感じる“心地よさ”や“効率の良さ”を指します。 車輪の再開発のようなDXを損なう体験がなければ開発はずっと楽しいんです! そこでこの記事では、「心から開発を楽しめる」相棒たちを10選紹介します! 1. Convex “SQLの呪縛”からの解放 歴史のあるSQLはどうしても、歴史に引っ張られます。 Supabaseとかを使ってると、Row Level SecuritySQL Functionsとかで、死ぬほど書きにくいSQLを書かなきゃいけなくなることありますよね。まるでFirebaseの認証ルール並み。良くも悪くも結局SQLだから、隠しきれない歴史の重み、つまりDXの悪さがでてくる。 しかしConvexは一切そういうのはありません!!!! 全てがDXを中心に一から考えられて作られたサービス。そう、React時代のバ

    今年俺を一番幸せにしたDX最高な奴ら10選
  • 90秒かかるDELETE文の原因を探る【PostgreSQL】 - エムスリーテックブログ

    こんにちは! デジスマチームの山田です。これはデジスマチームのブログリレー4日目の投稿です。 事業が成長してユーザー数やトランザクションが増加すると、それに比例して扱うデータの量やバリエーションも増加します。サービス規模の拡大に伴い発生する課題の1つにスロークエリがありますが、デジスマ診療においてもサービスの成長とシステムの健全性を維持するためにクエリの改善に日々向き合っています。 データベースの気持ちを知りたい 稿ではそうした取り組みの1つとして、とあるDELETE文の改善の過程と、改善に至るまでに得られた調査のTipsを共有できればと思います。なお今回の事象は内部運用における特定のプロセスを最適化するための取り組みであり、利用いただいている方々の体験やサービス品質に影響を及ぼしたものではないことを申し添えておきます。 前提としてデジスマ診療はPostgreSQL互換のAmazon A

    90秒かかるDELETE文の原因を探る【PostgreSQL】 - エムスリーテックブログ
  • WITH句てんこもりのSQLをデバッグする - エムスリーテックブログ

    巨大なSQLの出力が意図と違っていたり違っているかもしれないとき、どこから確認しようか頭を抱えてしまうことってありますよね。せめて多段階で作られているたくさんのCTE (WITH句)、これらが一つずつどんな表を出力しているのか簡単にのぞけたら手がかりもあるのだけれど⋯ 今回はそれをわりと現実的な手間でできるようにする小技です。エムスリーエンジニアリングループUnit1(製薬プロモーション)/Unit9(治験臨床研究支援)エンジニアの三浦[記事一覧 ]です。 魔法の一行 デバッグを実現する一行 We are hiring 魔法の一行 SQLの最後に -- */ という無意味なコメント行を付けておいてください。ひと目見て分かる通り、まったく無意味です。ところがこれがあるだけで、デバッグのときにこんなことができるようになります―― デバッグを実現する一行 次のようなCTEの大行列があるとします

    WITH句てんこもりのSQLをデバッグする - エムスリーテックブログ
    ene0kcal
    ene0kcal 2025/06/18
    これは良いプラクティス!/ネットにつなげない現場もあるんよなー(いまソーナンス)。
  • タイミーのプロダクトデザイナーは全員SQLを書きます|Yasuhiro Yokota

    来月、タイミーのプロダクトデザイナー全員にSQL習得してもらうことにしたよ — Yasuhiro Yokota & STAFF / タイミー (@yktyshr) December 25, 2024 そして、タイミーのプロダクトデザイナーはSQLを書けるようになってもらいました。その取り組みについてお話しします。 私はプロダクトをデザインするときに、FigmaNotion、そしてBigQueryを常に開いています。 データをもとに仮説を立ててインタビューすることもあれば、インタビューで得られた課題のアイデアをデータで裏づけることもあります。「多くのユースケースはどうだろう?」「エッジケースは?」という疑問が湧いたら、データで知れる場合が多いです。 このように、デザイナーが大小の不確実性に向き合いながら体験を設計するのであれば、データを扱うことは基的なリテラシーにしてよいのでは、と考えま

    タイミーのプロダクトデザイナーは全員SQLを書きます|Yasuhiro Yokota
    ene0kcal
    ene0kcal 2025/03/19
    プロダクトデザインでデータに親和するためにSQLが使えるようになるのは良いと思う。DAが書いたSQLも自分でカスタマイズできるようになるだろうし。
  • 勢いでつくったSQLツールと歩んだ28年。フリーソフト「A5:SQL Mk-2」開発秘話【フォーカス】 レバテックラボ(レバテックLAB)

    TOPフォーカス勢いでつくったSQLツールと歩んだ28年。フリーソフト「A5:SQL Mk-2」開発秘話【フォーカス】 フリーソフト「A5:SQL Mk-2」 開発者 松原 正和 1974年富山県生まれ。工場向けシステム開発やSESを経て、2020年より位置情報システム会社に参画。個人としては、1997年にSQLクライアント「A5:SQL Mk-2」の開発を開始。以来、約28年間にわたり改良と保守を続ける。ソフトの初期名は「あまのいわと5 IMPERIAL GODDESS II」。SF漫画『ファイブスター物語』の主人公名が由来。その後「あまのいわと5」を省略したA5に、旧日軍の九六式艦上戦闘機の別名「A5M」とアニメ『重戦機エルガイム』の登場メカ「エルガイムMk-II」を組み合わせ、現名称に。 「A5:SQL Mk-2」公式サイト X 「A5:SQL Mk-2」というSQLクライアントが

    勢いでつくったSQLツールと歩んだ28年。フリーソフト「A5:SQL Mk-2」開発秘話【フォーカス】 レバテックラボ(レバテックLAB)
    ene0kcal
    ene0kcal 2025/03/13
    A5M2は凄い便利に使わせてもらっています!/知らんけど、多分今なら生成AIに代替コードを書いてもらえる気がする。一気に書けないなら部分的に切り分けたら良い気がする。
  • オイ、そこのSELECT COUNT。余計な数え上げに意味なんかねえ - inSmartBank

    こんにちは。MySQLは秋の季語とする一派が世に存在していることを知り、私もMySQLに関わる記事を書いてみようと筆を取ることにしました。 さて、リレーショナルデータベースをバックエンドとするWebアプリケーション開発において、特定の条件に合致するレコードがN件だけ存在するかどうかを確認するロジックは頻出といえます。プログラマとして一度は書いたことがあるのではないでしょうか? この記事ではそのような件数カウントを行うためのクエリが引き起こした性能劣化と、その改善アプローチについて紹介していきます。 なお、記事の内容はMySQLを前提としており、アプリケーションコードの例はRuby on Railsを用いますが特別な前提知識は必要ありません。コードの雰囲気だけ感じ取っていただければと思います。 ありがちなコード if query.count == n の問題 冒頭で述べた通り、特定の条件に

    オイ、そこのSELECT COUNT。余計な数え上げに意味なんかねえ - inSmartBank
  • 生SQLに型を手書きする時代は終わり?Prismaの新機能「TypedSQL」

    SQLを扱う $queryRaw TypeScript向けのORMライブラリとしてPrismaがあります。Prismaは直感的で型安全なAPIを提供し、TypeScript向けのORMとしては第一に名前が上がることが多いライブラリです。 しかしそんな人気なPrismaでも、裏側では少しクセのあるSQLが発行されていたり、欲しいSQLがPrismaのAPIでは実現できない場合があります。 そういった場合のために $queryRaw というメソッドが用意されており、これを使うことで生SQLを書いてその結果を受け取ることができました。他のORMにもよくある機能です。 例えば以下のように実装することができます。 const users = await prisma.$queryRaw` SELECT id, name FROM "Users" WHERE id = ${userID} `; co

    生SQLに型を手書きする時代は終わり?Prismaの新機能「TypedSQL」
  • SQL滅ぶべし | ドクセル

    SQL • リレーショナルデータベースシステムと会話するための言語 • 1970年 Codd が RDB モデルと同時に提案 (Alpha言語) • 1974年 Chamberlin と Boyce が改良 • 元々は SEQUEL (Structured English Query Language) だったが、商標登録されていた • 読み方は エスキューエル とそのまま読む (Glliespie 2012) SQLSQL は目的別に 4つに分けられる • DCL (データ制御言語) GRANT とか • DDL (データ定義言語) CREATE TABLE とか • TCL (トランザクション制御言語) ROLLBACK とか • DML (データ操作言語) • INSERT, UPDATE, DELETE, SELECT • データ分析者にとって重要なのは SELECT 文

    SQL滅ぶべし | ドクセル
    ene0kcal
    ene0kcal 2024/05/08
    ほろぶべし等と強い言葉を使うと弱く見えるぞ!…それはさておき、ただの書き難さだけなのですね。パフォーマンス上げる際のノウハウ吸収してくれると更に良いなーと思いました。
  • サブクエリの書き方を2万文字弱かけてすべて解説する

    これはなに ども、レバテック開発部のもりたです。 今回はSQLのサブクエリについてまとめます。仕事でクエリを書く際、サブクエリは頻出の構文だと思うんですが、同時にサブクエリの書き方を完全に理解しているよという人は案外少ないのではないでしょうか?[1] 実際、MySQLの公式ドキュメントを見ると12ページくらいを割かれており、意外と奥深いのがサブクエリです。使いこなせると便利ですし、何よりちょっとSQLのコツみたいなのがわかって面白いよ、ということで記事にしてみました。 前提 この記事は以下の前提を含んでいます。 環境 MySQL8.0系 読者の知識 なんとなくサブクエリが書ける けど相関サブクエリとかになると「あーっ」つってGoogle meetを閉じてしまうくらいのレベル感 記事のボリューム 18,000文字 おれの卒論が20,000文字だった マサカリ 間違ってたら投げてくれ〜〜 それ

    サブクエリの書き方を2万文字弱かけてすべて解説する
  • 高効率なSQLクエリの書き方 - Qiita

    概要 この記事では、SQLクエリをより効率的に記述するためのベストプラクティスとテクニックに焦点を当てています。データベースのクエリはシステム全体のパフォーマンスに直結するため、最適な書き方を知ることは重要です。インデックスの効果的な活用方法、適切な結合の選択、そして条件の効果的な書き方など、SQLの最適化に関する具体的な手法を解説します。各SQL文に関する実行計画の結果も掲載していますので、ぜひご確認ください。 なお、Oracle19cとOracle12cでの利用実績がありますが、他のデータベースやバージョンにおいての検証は行っておりません。 新しい情報は随時追加されますので、お楽しみにしてください。 SQLの最適化に関連する基的なアイデア 以下の通りと考えています。 1.インデックスの利用 2.正しいJOINの選択 INNER JOIN、LEFT JOIN、RIGHT JOINなど、

    高効率なSQLクエリの書き方 - Qiita
    ene0kcal
    ene0kcal 2024/01/20
    そろそろこの辺りの知見や設定をAIが推奨提案してくれないかな。
  • 実務に役立つSQLのテクニック集 - Qiita

    概要 実務で使用されたSQLをまとめました。Oracle19cとOracle12cでの利用実績がありますが、他のデータベースまたバージョンでの検証は行っていません。 随時追加予定です。 Oracleデータベースメタデータ抽出 オブジェクトの定義や作成に使用されるSQL文を抽出 SELECT sqlarea.sql_id AS sql_id, parsing_schema_name, CASE WHEN length(sql_fulltext) > 10000 THEN to_clob('sql is too long') ELSE sql_fulltext END AS sql_fulltext, sql_bind_capture.name AS param_name, sql_bind_capture.value_string AS bind_value, last_active_tim

    実務に役立つSQLのテクニック集 - Qiita
  • xlsxファイルにSQLを実行するxlsxsql - Qiita

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

    xlsxファイルにSQLを実行するxlsxsql - Qiita
  • リーダブルSQL[より良いSQLを書くためのシンプルで実践的なテクニック] - Qiita

    はじめに 最近エンジニア界隈では「リーダブルコード」が話題なっていますね。 リーダブルコードでは、このような定理が紹介されています。 「コードは他の人が最短時間で理解できるように書かなければいけない。」 Dustin Boswell リーダブルコード P.3 より引用 皆さん、クソSQL1を読んだことがありますね? クソSQLを書いたことがありますね? 僕は、あります。 そこで、記事ではどうしたらリーダブルなSQLが書けるかというアイデアを紹介します。 処理の流れの順に上から読めるようにする サブクエリを多用したSQLは複雑に絡み合った大きな複雑な塊になってしまいます。サブクエリを使ったSQLでは、処理の流れは上から下ではなく、ネストされた内側から始まります。しかも、必ず内側から読んでいけば理解できるかというとそうでもなくて、内側のクエリが外側のクエリの影響を受けていて、内側のクエリだけ

    リーダブルSQL[より良いSQLを書くためのシンプルで実践的なテクニック] - Qiita
  • データ基盤の管理に役立つ監視用のSQLを紹介します - 10X Product Blog

    Analytics Engineerの吉田(id:syou6162)です。BigQueryを中心に10X社内のデータ関連の管理をしています。10Xに入社してそろそろ一年になろうかとしていますが、データ基盤を適切に管理 / 運用するためにSQLによる監視を少しずつ取り入れています。この記事では、具体的にどのようなSQLを書いて監視しているのか紹介したいと思います。 なお、SQLを使ったデータ基盤の監視自体については私の前職のTech Blogで詳細に書いていますので、そちらを参照してください。 SQLを使った監視でデータ基盤の品質を向上させる - MonotaRO Tech Blog データ管理に役立つメタデータに関する勉強会を社内外で開催しました - MonotaRO Tech Blog エントリはこれをベースに「dbtをフルに活用している10Xの環境向けに入れた監視」や「BigQuer

    データ基盤の管理に役立つ監視用のSQLを紹介します - 10X Product Blog
  • SQLの実行計画の読み方 |

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

    ene0kcal
    ene0kcal 2023/05/06
    ずいぶん前にこの基礎知識を得て数十億レコードのクエリの速度改善を行った(Oracleで)。インデックスを上手く設定しても思い通りにならなく、何度やっても実行結果が定まらないので仕方なくヒント句を使った記憶。