タグ

DBとQiitaに関するsatoshieのブックマーク (25)

  • 高効率なSQLクエリの書き方 - Qiita

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

    高効率なSQLクエリの書き方 - Qiita
  • あれあれ? CPU 増やしたのに速くならないぞ? - Qiita

    はじめに Web アプリケーションを開発している皆さん! 日夜性能問題に悩まされていると思います😅 記事では性能問題における 「CPU 使用率の見方」 に焦点をおいて話そうかと思います! CPU あるある CPU にまつわる謎? は大体次の2ケースかな〜、と思います。 ① クエリ応答が遅いからスケールアップ! → あれ?変わらないぞ? Web アプリ開発していると、API 応答が遅い → 原因は重いクエリ (SQL) というケースはよくあるかと思います。当然速度改善したいです。お金で簡単に解決できるならそうしたい。 例えば RDS のインスタンスタイプ db.r5.xlarge を今使っているとしましょう。 vCPU 数は 4 です。これを 2倍性能 の db.r5.2xlarge にしましょう! db.r5.xlarge db.r5.2xlarge

    あれあれ? CPU 増やしたのに速くならないぞ? - Qiita
  • Amazon RDSにおけるrdsadminユーザとは何者か - Qiita

    Amazon RDSにてAurora(MySQL)クラスタを構築し、そのログを参照していたところ、 rdsadmin というユーザが多数のクエリを発行していることを確認した。 このユーザアカウントの正体がよくわからなかったので何者か調べてみる。 AWSドキュメントに見る rdsadmin Amazon Auroraドキュメントの Amazon Aurora MySQL でのセキュリティ には、以下のような記載がある。 各 DB クラスターに管理サービスを提供するために、DB インスタンスの作成時に rdsadmin ユーザーが作成されます ということで、 rdsadmin はその名前の通り AWS マネージドサービスとしてのアカウントだとわかる。 残念ながらここに記載している管理サービスとは何かの説明はないので 具体的にどのような動作を行うのかはわからない。 また、Aurora(MySQL

    Amazon RDSにおけるrdsadminユーザとは何者か - Qiita
  • HerokuのDBを操作する方法 - Qiita

    はじめに この記事ではHerokuにデプロイしたアプリのDBを、ローカルから参照する方法を解説します。 前提として、PCHerokuをインストールしていることと、Herokuにアプリをデプロイしている必要があるため、それらの作業がまだ出来ていない人は以下の記事を参考にして設定を終わらせておきましょう。 https://qiita.com/ysda/items/5719c894254aa898aed1 この知識が役立つ場面 ・番環境でのみバグが起こっている 番環境のDBに入っている何らかのデータが原因という場合もあります。 こういう時に、番のDBを参照して確認してみましょう。 ・卑猥な言葉や差別用語が投稿されてしまった アプリをデプロイすると誰がどんなデータを作るかわかりません。 ブログアプリを例にすると、いつの間にか卑猥な言葉や差別用語の含まれた記事が作られる可能性があるわけです。

    HerokuのDBを操作する方法 - Qiita
  • 【Laravel】PHPUnitテスト用にDBを設定してデフォルトのDBを汚さなくする - Qiita

    テスト用にDBを用意してテストを実行する テスト実行するたびにDBが消えたりテストデータが登録されたりするのは陶しいので PHPUnit用にDBを用意してテスト実行時はそのDBを使用するようにしてみます こちらも参考にしてください つ 【LaravelPHPUnitテスト用にSQLiteDBに設定した際に気を付けるべきマイグレーションの記述と解決方法 実装例 configディレクトリ以下のdatabase.phpにtesting用の設定を追加 <?php /* |-------------------------------------------------------------------------- | Database Connections |----------------------------------------------------------------

    【Laravel】PHPUnitテスト用にDBを設定してデフォルトのDBを汚さなくする - Qiita
  • 【クラウドDB比較】無料枠で提供されるサービスレベル - Qiita

    はじめに クラウドサービス多すぎる。 なんとなく使いたいものは決まっているのですけど、自己学習も兼ねてふわっとサービスレベルを比較してみる。 VPS/PaaS/FaaSの比較はこちら: 【クラウドVPS/PaaS/FaaS比較】最低料金とサービスレベルの比較 前提 無料枠で何ができるんだろう?の比較 個人開発レベルで何を選ぶかの選定に使う程度の比較 エンタープライズとして何を使うかレベルの詳細な機能比較ではない 初回登録時の「〜ドル分のクレジットをプレゼント!」みたいなのは、無視してます。 AWSGCPとFirebaseとHerokuとMongoDB@Atlasの比較 最初に世の中全てのクラウドを比較しようとしてモチベーションが死にそうになった 選定基準は、「【比較してみた】みんなが使っている個人開発Webサービス)向けPaaS・ホスティングサービス」でよく使われていたもの DBのカテ

    【クラウドDB比較】無料枠で提供されるサービスレベル - Qiita
  • ORM order句でfieldを使ったソート - Qiita

    $test = $this->Hoge ->find() ->order([ 'field(id, 3, 5, 7)' => 'DESC' ]); order句の連想配列は、keyがソート対象、valueがソート条件となっています。 fieldの第一引数には、ソート対象とするカラムを指定します。 今回の場合、idを対象としています。 第二引数以降は、第一引数に指定したカラムに存在する値を指定します。 今回はidカラムに存在する3,5,7を対象としています。

    ORM order句でfieldを使ったソート - Qiita
  • 【AWS】それぞれのDBの特徴を簡単にまとめました(備忘録) - Qiita

    はじめに 現在、AWSSAAの学習をしております。 DBに関する問題が出題されるのですが、特徴がごっちゃになりがちなので備忘録としてアウトプットします。

    【AWS】それぞれのDBの特徴を簡単にまとめました(備忘録) - Qiita
  • SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話 - Qiita

    2020/9/30追記 記事は元々、「SQL記述者全員が理解すべきSELECT文の実行順序のお話」というタイトルで投稿しておりました。 しかし、知見のある方からのコメントと自分でも調べてみた結果、今回紹介している順序はあくまで論理的な処理順序であり、実行順序とは別物ということがわかりました。 誤った知識を布教してしまい申し訳ございません。 2020/9/30のタイミングで、記事のタイトルを「SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話」に変更させていただきました。 はじめに 「SQLといえば、エンジニアが扱うスキル」と思われがちですが、最近はマーケターや営業など、非エンジニアの方もSQLを使って、自らデータを抽出し分析する方が増えてきています。 またエンジニアの方でも、ORM任せでなんとなく理解している状態の方もいるのではないでしょうか? 今回は、そんな方々にこそ

    SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話 - Qiita
  • DBの中身もろとも消したいときの、Mysql-server の完全削除 - Qiita

    MySQLもろとも完全に削除したい どうしてこうなったかと言われると、 設定作業中に間違って MySQLテーブルのuserの中身を全て消してしまい、新しいユーザも作れず、どうにもならなくなりました。 MySQLごと再インストールすれば、データベースの中身もデフォルトに戻るかなと思ったのですが

    DBの中身もろとも消したいときの、Mysql-server の完全削除 - Qiita
  • MySQL: INSERT...ON DUPLICATE KEY UPDATEまとめ - Qiita

    INSERT...ON DUPLICATE KEY UPDATE構文を使うと レコードがなければINSERT、あればUPDATE 複数行の一括UPDATE フィールド毎に条件判定して更新 を1度のクエリで行うことができる。集計処理などに便利。 基 レコード(行)がなかったらINSERTあったらUPDATEという処理を1クエリで行える。 ユニークなフィールドに対して重複する行が挿入される場合はUPDATEという判定 なので利用には UNIQUEインデックス(かPRIMARY KEY)を指定する必要 がある

    MySQL: INSERT...ON DUPLICATE KEY UPDATEまとめ - Qiita
  • MySQL で timestamp 型の差分を出すには - Qiita

    株式会社オズビジョンのユッコ (@terra_yucco) です。 今日はトラブル対応中に出くわした MySQL の小ネタ。 トラブルの内容 抽出ロジックにミスがあり、特定のアクションをしてから 60 分後までにはお知らせが飛ぶ予定だったのですが、それが一部の条件で飛ばなくなっていました。 対応自体は処理を修正して完了しましたが、影響を受けた人の抽出タスクが残ります。 2 つの日付の差分を取りたい 特定のアクションをしてから 60 分後までにはお知らせが飛ぶ予定 なので 特定のアクションをした日時 実際に対応後お知らせが飛んだ日時 がわかれば、取得は可能です。 幸い、この 2 つの値は timestamp 型で DB に入っていました。 MySQL で timestamp 型の差分を出したい 【誤】減算 timestamp 型は名称からして Unix の Epoch 秒なのかと思っていたの

    MySQL で timestamp 型の差分を出すには - Qiita
  • 2020年現在のNewSQLについて - Qiita

    Disclaimer 当記事はNewSQL開発ベンダの技術ブログや各種論文、その他ニュースサイト等の内容を個人的にまとめたものです。 そのため、理解不足等に起因する誤解・誤認を含む可能性があります。更なる理解が必要な方はリファレンスに挙げた各種文献を直接参照下さい。技術的な指摘は可能であれば取り込み修正しますが、迅速な対応はお約束できません。 NewSQLの解説は二部構成 当記事は前編でNewSQLの概要編となる。 全体の目次は下記である。 NewSQLとは何か NewSQLのアーキテクチャ NewSQLとこれまでのデータベースの比較 NewSQLのコンポーネント詳解 1章から3章までの内容を当記事で解説する。 4章はさらに詳細な技術的解説となり、後編の「NewSQLのコンポーネント詳解」で記述している。 こちらも合わせて一読いただきたい。 1. NewSQLとは何か NewSQLとは、海

    2020年現在のNewSQLについて - Qiita
  • Laravel5.7における複合プライマリキーを持つテーブルへの挿入と更新 - Qiita

    Laravelと複合プライマリキー 既存の複合プライマリキーを持つMySQLのテーブルに対する操作で混乱したので備忘録。 複合キーはLaravelでは有名なネタのようですが、幸いにもこれまで対応する機会はありませんでした。 事情によりサロゲートキーは導入できない前提です。 mpywさんよりコメントで便利なトレイトを教えていただいたので、公開半日もせず大幅に改稿しました。 HasCompositePrimaryKey トレイトの導入 mpywさんより教えていただいたトレイトです。 https://github.com/mopo922/LaravelTreats/blob/master/src/Model/Traits/HasCompositePrimaryKey.php 含まれている LaravelTreats をまるごとインストールします。

    Laravel5.7における複合プライマリキーを持つテーブルへの挿入と更新 - Qiita
  • crontab database ~君がしでかしてくれたもの~ - Qiita

    この記事は番環境でやらかしちゃった人のアドベントカレンダー2日目の記事です。 内容的にそろそろ時効だと思うので供養のために書きました。 追記。そういえば時期をちゃんと書いてなかったけど事件が起きたのは去年2018年、つまり仕込み(ヲイ)は2017年の話です ぶっちゃけネタ記事ですw (たまたま見つけて参加してみただけなのに昨日の記事の伸びっぷりを見て戦々恐々としてる TL;DR DB移行作業において、テスト期間中は常に最新のデータで処理できるように書いておいたプログラムをcrontabで実行していた。最終的に番に合わせて日時を調整していたが、そのことを失念し1年後に再実行されてしまい、番データが1年前に巻き戻る事故発生。 crontab は分、時、日、月、曜日を指定できるが、1年後に帰ってくるから気をつけてね。という話。 惨劇はなぜおこってしまったのか 結論から言えばcrontabの

    crontab database ~君がしでかしてくれたもの~ - Qiita
  • ソシャゲエンジニアの自分が開発に必須だなと思った知識(MySQL編) - Qiita

    この記事の目的 自分は、とある会社様の元でソシャゲAPI 開発をさせていただいています。 ソシャゲは、リリース時やイベント時などに集中アクセスされやすく、負荷軽減の知識がない状態で開発を行ってしまうと、運用時に緊急メンテ祭りになりやすいジャンルかなと思っています。 これまで培ってきた MySQL の知識ですが、脳内メモリ量の関係上、暗記できないのでメモしておこうというのが主目的です。 ここ数年ほどソシャゲ開発しかしていないため、偏っている感がある内容ですのでご注意ください。 概要 ストレージエンジンは InnoDB。メインで扱っている MySQL バージョンは 5.6。 記事の内容ですが、これらのキーワードを見て、おおよそ分かる方は読む必要はないかと思います。 インデックス系 クラスタインデックス カバリングインデックス EXPLAIN で注意するべき値 トランザクション系 MVCC

    ソシャゲエンジニアの自分が開発に必須だなと思った知識(MySQL編) - Qiita
  • SQLアンチパターンもりもりDBを設計しよう! - Qiita

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

    SQLアンチパターンもりもりDBを設計しよう! - Qiita
  • MySQL の権限のコマンドまとめ。 - Qiita

    GRANT ALL ON *.* TO adminuser@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; ※MySQLにはGRANT権限というものがあります。GRANT権限とは、他のユーザに対して権限を付与することができる権限のことです。当然のことながらGRANT権限は通常管理者用ユーザにか付与しません。 IP制限 GRANT ALL ON *.* TO adminuser@'172.16.0.0/255.255.255.0' IDENTIFIED BY 'password' WITH GRANT OPTION;

    MySQL の権限のコマンドまとめ。 - Qiita
  • docker-compose でMySQL環境簡単構築 - Qiita

    version: '3' services: # MySQL db: image: mysql:5.7 container_name: mysql_host environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: test_database MYSQL_USER: docker MYSQL_PASSWORD: docker TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf - ./docker/db/sql:/

    docker-compose でMySQL環境簡単構築 - Qiita
  • メモ: DBでrollbackしてもauto_incrementが戻らない理由 - Qiita

    背景 Rspecでテストを書いていて、sqliteで通っていたがMySQLにすると通らない エラーを見てみるとidを指定してDBから値を取って来ている処理で、データがが無いと怒られている テストとして、auto_increment指定しているidが1に戻っている事を期待しているが、戻っていない しっかりとそこを考えた事がなかったが、ググってみると以下の内容がしっくり来たのでメモとして残す もしシーケンスがロールバックされうるとしたら、シーケンスを使ってINSERTしているトランザクションが実行中だった場合、それが終了するまではシーケンスが次に何の数字を吐き出すか確定できません。すると、他のトランザクションが単に連番を生成するためだけにブロックされてしまうのです。 RDBの世界で主キーに期待されていることはユニークなことだけであり、連続であることは期待されていません(どうせDELETEで抜け

    メモ: DBでrollbackしてもauto_incrementが戻らない理由 - Qiita