タグ

SQLに関するstarneon3517のブックマーク (42)

  • MySQLのEXPLAIN(実行プラン)まとめ - Qiita

    MySQLのEXPLAIN(実行プラン)について、まとめます。 EXPLAINは、クエリがどのように実行されるかを確認できます。 例えば、昨日まで1sだったクエリが、今日は10sかかる。という経験はないでしょうか。 EXPLAINを確認すると、意図しないIndexが使われいて、遅くなっていた。ということがあります。 はじめに MySQL 5.6.3以降では、EXPLAIN に使用できる説明可能なステートメントは、SELECT、DELETE、INSERT、REPLACE、UPDATE です。MySQL 5.6.3より前では、SELECT が唯一の説明可能なステートメントです。 今回は、MySQLのバージョンは5.7で試します。 EXPLAIN確認方法 クエリの先頭に EXPLAIN をつけて実行します。 +----+-------------+-------+------------+---

    MySQLのEXPLAIN(実行プラン)まとめ - Qiita
  • 【SQL】「JOIN」と「パフォーマンス」について | プログラミングマガジン

    JOINが増えるとパフォーマンスが低下します。 INNER JOINの場合は論理和になるので、A、B、C、Dと4つのテーブルがあった場合は、AとB、AとC、AとD、BとC、BとD、CとDというように重なりを調べていくので指数関数的に増加することになります。 JOINのテーブルスキャンは掛け算なので、10行と10行なら100行、1000行と1000行なら1000000行のスキャンが走ります。 じゃあ、JOINを使ってはいけないのか? それはないです。N+1問題の温床になってしまったりするので使わないという選択肢はないです。 対策 インデックスを貼る。 100行と100行のスキャンの場合、インデックスが貼られてなかったら100✖️100の10000行のスキャンが走りますが、インデックスが貼れていたら、100+100の200行のスキャンで済みます。 SQLを見直す。 JOINの回数を減らすこと。

  • SQL Joinサンプル集 Joinで遅いSQLの原因を調べる方法 | ポテパンスタイル

    SQLjoinのサンプルコードを集めてみました。 以下、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。SQL実行結果の表示にはphpMyAdminを使用しています。 SQLjoinの基 別テーブルの項目を、キーを使って引っ張って来たい、というときに使うのがjoin。 具体的な例だと、employeesテーブルのfist_name(名前)、last_name(姓)と、salary(年収)をemp_no(社員番号)で紐付けて抽出したい…といったときに使います。 SELECT employees.first_name, employees.last_name, salaries.salary FROM employees left join salaries on employees.emp_no = salaries.emp_no WHERE sa

  • あなたの遅延はどこから? SQLから! 〜患部に止まってすぐ効くSQLレビューチェックリスト 年初め特大サービス号〜 - ANDPAD Tech Blog

    あけましておめでとうございます! 今年は異世界放浪メシのアニメが放送されるらしいので楽しみなバックエンドの原田 (tomtwinkle)です。 内部で運用しているSQLレビューチェックリストの一部を抽出し思いつきで追記して行った結果、結構な分量になってしまいました。 暇な時でも流し読みして頂けるとありがたいです。 Motivation SQLレビュー観点 大きくSQLが変更される修正の際にはEXPLAINをレビュー内容に加える 検索のキーにINDEXを使用しているか SQL発行回数がN+1(1+N)の構造になっていないか サブクエリを利用したSQLはパフォーマンス要チェック Viewの利用は基的に禁止 CROSS JOINは禁止 WHERE句で十分に絞った検索をしているか 必要なcolumnだけSELECTしているか レコード数だけ必要な場合にCOUNT用のSQLを発行しているか 集計関

    あなたの遅延はどこから? SQLから! 〜患部に止まってすぐ効くSQLレビューチェックリスト 年初め特大サービス号〜 - ANDPAD Tech Blog
  • 第8回 SQL流集合操作(1) 複数行を1行にまとめる | gihyo.jp

    はじめに SQLという言語の大きな特徴として、処理をレコード単位ではなく、レコードの「集合」単位でひとまとめにして記述するというものが挙げられます。具体的には、GROUP BY句とHAVING句、それに伴って利用されるSUMやCOUNTなどの集約関数の使い方が鍵になります。SQLでは、これら集合操作の機能が充実しているため、手続き型言語ならば複雑なループや分岐を使って記述せねばならない処理を、非常に簡単で見通しよくコーディングすることが可能になっています。 しかし一方で、プログラミングにおける思考の基単位を「レコード」から「レコードの集合」に切り替えるためには、多少の発想の転換を要します。この切り替えがうまくいかないために、せっかくSQLが最も領を発揮するフィールドであるにもかかわらず、その機能を十全に利用できないまま、もどかしい思いを抱えているエンジニアも少なくないでしょう。 章で

    第8回 SQL流集合操作(1) 複数行を1行にまとめる | gihyo.jp
  • 分析関数(ウインドウ関数)をわかりやすく説明してみた

    はじめに ちょっととっつきにくいけどとっても便利な分析関数について、なるべく分かりやすく説明してみようと思います。Oracleを対象にしていますが、他のDBでもたぶん似たようなものでしょう(無責任)。 まず分析関数とは何をするものか、ですが、一言で言うと集合関数と同じ集計動作をそれぞれの行に制限範囲で実行するものです。ここでいう集合関数とは、MAXやSUMやAVG等、GROUP BYと共に使い行をまとめるて集計計算する関数ですね。分析関数は集合関数と同様の計算をしますが、集合関数と違い行をまとめません。それぞれの行で集計計算し結果を返します。ここが集合関数との大きな違いです。 また、集合関数ではGROUP BYの同じカラム値をもつ全行を一つに集計しますが、分析関数では集計対象となる行の範囲を任意で指定できます。関数に続くOVER句でこの範囲指定を行います。集合関数と分析関数は基同じ名前な

    分析関数(ウインドウ関数)をわかりやすく説明してみた
  • ポケモンを題材に「SQLアンチパターン」を実践してみる - kanayamaのブログ

    @tkanayama_です。「SQLアンチパターン *1」 というを読みました。「ポケモンを題材に因果推論を実践してみる」のように、仮想的なストーリ上で実際に使ってみた感を出すことにより、自分の記憶に定着させることを狙います。 前提として、何をアンチパターンとするかは状況(ベンダーフリーである必要があるかどうか、どの程度の頻度で更新されるか・・・など)によって大きく異なるので、下記で紹介するアンチパターンは実は状況によっては問題にならないケースもあるかと思います。この投稿はあくまで「SQLアンチパターン」に忠実に従うことが目的です。 www.oreilly.co.jp 追記 登場人物 ストーリー フシギダネへの対応 ヤミカラスへの対応 ディグダへの対応 誤登録でポケモントレーナーになってしまったユーザーの削除 最後に 謝辞 追記 このブログを公開後、「外部キー制約はレコードロック周りのト

    ポケモンを題材に「SQLアンチパターン」を実践してみる - kanayamaのブログ
  • Azure Cosmos DB の無料版が出たので相性最高の Azure Functions と合わせて使ってみた - Qiita

    無料版が出ましたね!! Publickey さんでも取り上げてもらってます。 マイクロソフト、「Azure Cosmos DB」がずっと無料で使える「Free Tier」を発表。地球規模の分散データベースを最大5GBまで Cosmos DB とは Azure で一番強い NoSQL DB だと思ってます。色々な DB のモードがあって SQL API Cssandra API MongoDB API Gremlin API テーブル API etcd API の中から選べます。私は SQL API が好きというか基的に SQL API しか使ったことない感じです。 SQL API は JSON でデータが格納されて SQL で問い合わせ出来る感じです。(雑な説明) 作ってみよう Azure ポータル から Cosmos DB を作成します。作成するときに「Apply Free Tier

    Azure Cosmos DB の無料版が出たので相性最高の Azure Functions と合わせて使ってみた - Qiita
  • SELECT文で本番環境を落としたお話 - Qiita

    (この記事は 地平線に行く とのマルチポストです) 番環境でやらかしちゃった人 Advent Calendarで、このパターンのやらかしはなかったのでキーボードを叩くことにしました。 番外編のつもりでお楽しみください。 この記事が、新たな障害発生を防ぐことにつながれば幸いです。 何をやったのか ある日、ちょっとした調査のために番データベースのデータを確認することになりました。 (個人情報が格納されているようなシステムではなかったので、必要であれば番データベースへのアクセスが許されていました) もしメンテナンスがあればそのタイミングでやればよかったのですが、直近では特に予定はないとのことでした。そのため、システムが動いている状態のまま作業をすることにしました。 ごく単純な SELECT を実行するだけのつもりだったので、システムに影響がないと判断したためです。 その際、万が一コピペをミ

    SELECT文で本番環境を落としたお話 - Qiita
  • SQLのインデックスとそのチューニングについてのオンラインブック

    開発者向けのSQLインデックス解説サイト、管理についての間違いない知識を提供します。 インデックスは開発時には忘れられがちである一方で、非常に効果的なSQLのチューニング方法です。Use The Index, Lukeでは、HibernateなどのORMツールの解説にとどまらず、SQLのインデックスについて基礎から説明します。 Use The Index, LukeはSQLパフォーマンス詳解のWeb上の無料版です。サイトを気に入って頂けたら、ぜひ書籍も購入してみて下さい。また、このサイトの運営をサポートする様々なグッズも販売しています。 MySQLOracleSQL ServerなどにおけるSQLのインデックスUse The Index, Lukeでは、ベンダにとらわれないインデックスの説明を心がけています。製品特有の事柄については、以下のような表示をしています。 DB2Use The

    SQLのインデックスとそのチューニングについてのオンラインブック
  • SQLアンチパターンもりもりDBを設計しよう! - Qiita

    概要 名著SQLアンチパターンを読み終えたので、それの復習のために悍ましいデータベースを作ろうと思った。 まず前半では、SQLアンチパターンを意図的に盛り込み、目も当てられない酷い設計をします。 そのあとリファクタリングを行なったER図に書き直していきます。 なお、真面目に書くと参考書の丸写しになってしまうので、この記事は アンチパターンもりもりのER図を見て嫌悪感を学習し、設計に役立てようという趣向のもと、詳しい説明は省きます。 とても良いなので読んでください。 想定するシステムの概要と状況 目的において適切かはわかりませんが、とりあえず考えることの多い”お金”を扱うシステムを想定してみます。 私はブラックジョークが好きなので、今回は「ちょっと怖い金融屋さんが使う債務者管理システム」のER図を設計してみようと思います。 ざっくりした要件 債務者を登録でき、プロフィールを入力できる。 債

    SQLアンチパターンもりもりDBを設計しよう! - Qiita
  • ITエンジニアはSQLアンチパターンを読むべし! 軽いまとめ | つかびーの技術日記

    もうこれだけでBad smellしかしませんね。検索とか考えると頭が痛いです。重複考慮した更新や削除とかも同じくきついですね。 従属テーブル作って対応しましょう。 8. メタデータトリブル(メタデータ大増殖) 全く同じテーブルなのに年や月で分かれていたり、同じような列が連続しているやつです。 CREATE TABLE LOG_2013 ( ... ); CREATE TABLE LOG_2014 ( ... ); CREATE TABLE LOG_2015 ( ... ); データが多すぎるから分けた、というケースが多いと思います。古いデータは使わないし、かといってテーブル1つにするとクエリが遅くなるし、みたいな。 上記のようなケースならOKだし、実際そういう経験はありますが。LOG_2014テーブルの2014/12/31のデータが間違ってたので、UPDATEして2015年のデータにしよう

  • SQLによるデータ分析のテクニック - Qiita

    概要 前処理大全を読み、以下の理由から感銘を受けたものを記載する。 データ分析で、これに近いことを頼まれた(このような面倒くさい処理は、データ分析ではよくある) こんなふうにSQLを書けるんだ。めっちゃ楽やんと知った。 詳しくは前処理大全を読むことをおすすめします。 データなども「前処理大全」のgithubにあります。 前提 以下のSQLはPostgreSQLのものです。(最下部の日付の計算以外はほかでも動きそう) 内容 最も多い価格帯(最頻値)の取得 予約を格納したテーブルから、最も頻出する価格帯を取得する。 正確な価格ではなく、ROUND関数を使って千円の桁で四捨五入をしたものを対象にする。 SQL SELECT ROUND(total_price, -3) as total_price_round FROM reserve_tb GROUP BY total_price_round

    SQLによるデータ分析のテクニック - Qiita
  • CakePHPでクエリを実行した時のSQL文を確認する方法|アド・エータイプ スタッフブログ

    CakePHPで実行したSQL文を確認する方法を記載します。 フレームワークで開発を行なっている場合、それぞれ用意されているメソッドを使ってデータを操作するので実際にどのようなSQLが発行されているか確認することがあります。 CakePHPでは下記の方法で実行した時のSQL文をデバックすることが可能です。 CakePHPで実行したSQL文を確認する SQL文を確認する場合はビューとコントローラー(ビュー以外)のどちらでも確認することができます。 状況に応じて使い分けるといいかと思います。 ビューでSQL文を確認 ビューファイルに下記を記述することで実行されたSQLを出力することができます。

    CakePHPでクエリを実行した時のSQL文を確認する方法|アド・エータイプ スタッフブログ
  • SQL実行計画の疑問解決には「とりあえずEXPLAIN」しよう

    EXPLAINステートメントとは EXPLAINは、SQLの実行計画に関する情報を取得するためのステートメントです。実行計画とは「どのインデックスを使って(あるいはインデックスを使わずにテーブルスキャンで)クエリーを処理するか」をMySQLが判断した結果のことです。「インデックスはちゃんと使われているだろうか」「インデックスでどこまでクエリーを効率的に処理できているだろうか」という疑問が湧いた時には、「とりあえずEXPLAINで」となりますよね。 EXPLAINのマニュアルはこちらに、EXPLAIN の出力結果のカラムの意味についてはこちらに記載があります。 EXPLAINの何を見るか たとえば、次のような重いクエリーがあったとしましょう。 mysql> SELECT COUNT(some_column) FROM some_table WHERE some_column = xxx; +

    SQL実行計画の疑問解決には「とりあえずEXPLAIN」しよう
  • 新著が出ます:『達人に学ぶ SQL徹底指南書 第2版』 - ミックのブログ

    日、新著が発売となります。書の初版は処女作ということもあり、色々と書き手として未熟な部分も多く出てしまったなのですが、幸運にも長い期間読んでいただいたことでこのたび改訂版の刊行にこぎつけることが出来ました。 さすがに10年経過すると内容も古くなっており、多くのコードをリバイスしています。特に初版刊行時にはまだサポートが不十分だったウィンドウ関数が、現在では主要なDBMSではほぼ利用できるようになったことを受けて、全面的にこれを採用しました。これにより性能と表現力を両立させるモダンなSQLコーディングが可能になったので、ぜひ書でその素晴らしさを確認いていただければと思います。 以下に書の前書きを引用しますので、購入の際の参考にしてください。 書の初版が刊行されてから、10年が経過しました。筆者にとって、初版は初めて書いた、いわゆる処女作であり、自分の知見や文章がどのような受け取

    新著が出ます:『達人に学ぶ SQL徹底指南書 第2版』 - ミックのブログ
  • なぜ、SQLは重たくなるのか?──『SQLパフォーマンス詳解』の翻訳者が教える原因と対策 - エンジニアHub|Webエンジニアのキャリアを考える!

    なぜ、SQLは重たくなるのか?──『SQLパフォーマンス詳解』の翻訳者が教える原因と対策 『SQLパフォーマンス詳解』の翻訳者の松浦隼人さんに、8つの「SQLが重たくなる原因とその対策」を聞きました。システムのボトルネックになるような「問題のあるSQL」を回避するノウハウを学びましょう。 データの操作や定義をする言語「SQL」は、どのような領域を担うエンジニアにとっても必修科目です。しかし、その仕様をきちんと理解し、パフォーマンスに優れたSQLを書ける方はそれほど多くありません。問題のあるSQLを書いてしまい、知らぬ間にそれがシステムのボトルネックになってしまう事態はよく発生します。 では、どうすればそうした事態を回避できるのでしょうか? そのノウハウを学ぶため、今回は『SQLパフォーマンス詳解』の翻訳者であり、自身もエンジニアでもある松浦隼人(まつうら・はやと/@dblmkt)さんに8つ

    なぜ、SQLは重たくなるのか?──『SQLパフォーマンス詳解』の翻訳者が教える原因と対策 - エンジニアHub|Webエンジニアのキャリアを考える!
  • 企画や営業など非エンジニア職がSQLを勉強したらメリットばかりだった話 - paiza開発日誌

    Photo by Linux Screenshots こんにちは、谷口です。 あなたの会社ではSQLを使える人の割合はどれくらいでしょうか? ITエンジニアであれば多くの人が日頃から使っているSQLですが、それ以外の職種では「SQLを使えないので、データがほしいときはエンジニアにお願いしている」という人も多いかと思います。 ただ、自分でSQLを使えないと、今すぐデータがほしいのに確認できるまで時間がかかったりして不便なことも多いですよね。また、エンジニアにとっても、開発中にちょっとしたデータ取得がいくつも差し込まれたり、「データが思っていたのと違った」と言われてやり直しになったりするのはストレスになってしまいます。 paiza社内でも、かつてはそんな状態でしたので、社内で非エンジニア職向けにSQLの勉強会を実施するようになりました。現在は、営業・企画・事務局など、さまざまな職種の人たちも自

    企画や営業など非エンジニア職がSQLを勉強したらメリットばかりだった話 - paiza開発日誌
  • 『ビッグデータ分析・活用のためのSQLレシピ』はデータ分析でSQLクエリを叩く人なら必読の黒魔術大全 - 渋谷駅前で働くデータサイエンティストのブログ

    こちらのをご恵贈いただきました。 ビッグデータ分析・活用のためのSQLレシピ 作者: 加嵜長門,田宮直人出版社/メーカー: マイナビ出版発売日: 2017/03/27メディア: Kindle版この商品を含むブログを見る 一般的なSQLというのはDB管理の一環としてのインフラエンジニア向けの技術書であることが多く、意外にもデータ分析を主目的としたSQLの使い方やクエリの工夫の仕方について書かれたというのはあまり多くないんですよね。故に、多くのデータ分析者は難解なテーマを実現するクエリを書きたくても参考になる資料が乏しく、途方に暮れるわけです。僕もHive / Redshift / BigQueryのクエリを書きながら「こんな分析がしたいんだけど、それを実現できるクエリってないよなぁ。。。」と何度天を仰いだことか。 そんなところに突然降って湧いてきたのがこちらの新刊書。もう目次を見ただ

    『ビッグデータ分析・活用のためのSQLレシピ』はデータ分析でSQLクエリを叩く人なら必読の黒魔術大全 - 渋谷駅前で働くデータサイエンティストのブログ
  • A5:SQL Mk-2 - フリーのSQLクライアント/ER図作成ソフト (松原正和)

    特徴・機能 様々なデータベースへの接続 Oracle Database へはOCI接続(オラクルクライアント経由)、直接接続(オラクルクライアント不要)で接続出来ます。 PostgreSQL, MySQLへは直接接続(クライアントライブラリ不要)で接続出来ます。 Microsoft SQL Server へは NativeClient 経由で接続できます。 それ以外のデータベースへはADO(OLE DB)または、ODBCで接続出来ます。 SQL入力支援機能 Ctrl+SpaceでSQL文を解析しテーブル名やテーブルカラム名の入力補完が行えます。 共通表式や副照会も解析する強力な機能です。 GUIでのクエリーの設計と分析機能 GUIを使いクエリーの設計と分析を使ってクエリーを作成することができます。 実行計画取得機能 RDBMSSQLを実行する際の実行計画(アクセスプラン)を表示します。