MySQL 8のSKIP LOCKED・NOWAIT(ロッキングリードオプション)を試してみる
行ロックを利用してレコードを参照する方法をロッキングリードと呼びます。ロッキングリードを利用することで参照レコードの情報を保護できます。 ロッキングリードには共有ロックを利用するSELECT … LOCK IN SH…
行ロックを利用してレコードを参照する方法をロッキングリードと呼びます。ロッキングリードを利用することで参照レコードの情報を保護できます。 ロッキングリードには共有ロックを利用するSELECT … LOCK IN SH…
MySQLのデータベースエンジンにはMyISAMとInnoDBがあります。 InnoDBにはレコード単位のロック『行ロック』が実装されています。 行ロックが実行されているテーブルにアクセスする場合、行ロック中のレコード以…
InnoDBはMySQLのデータベースエンジンの1つです。InnoDBの行ロックには共有ロック(Sロック)と排他ロック(占有ロック、Xロック)の2種類があります。1 今回は共有ロックと排他ロックの概要と、ロック時の挙動に…
検索条件によってはSQLでインデックスが利用されないケースがあります。 達人に学ぶDB設計 徹底指南書などでインデックスが利用されないと一般的に言われているケースは以下の通りです。 しかし手元で検証してみたところ上記のう…
新規テーブルの作成やクエリチューニング時にインデックスを作成する機会があります。 インデックスを作成することでSQLの実行時間を短くできます。 そこで今回はインデックスを作成する際のチェックポイントについて紹介します。 …
SQLのJOINで利用される代表的な結合方法にはNested loop join(NLJ、ネステッドループ結合)、Merge join(マージ結合、ソートマージ)、Hash join(ハッシュ結合、ハッシュ値マッチング)…
複合インデックス(結合インデックス)とは複数のカラムを組み合わせたインデックスのことをいいます。 検索やソート条件で一緒に利用されるカラムに対して複合インデックスを作成することでクエリの高速化が期待できます。 複合インデ…
前回、MySQLのEXPLAINの読み方とチューニング時のチェックポイントでEXPLAINの読み方について紹介しました。 スロークエリを引き起こす最も多い原因のひとつが『正しくインデックスが作成・利用されていない』です。…
EXPLAINを実行することでSQLの実行計画が取得できます。クエリのチューニングにおいてEXPLAINの理解は必須です。 今回はEXPLAINの読み方とクエリをチューニングする際のチェックポイントについて紹介します。 …
アプリケーションの性能や検証をする際に、1対多の関係を持つダミーデータを大量に用意したい時があります。 Rails 6から利用できるinsert_allメソッドを利用すると大量のデータを短時間でインサートできます。 また…
Go言語によるREST APIの実装方法を紹介します。 今回は例としてシンプルなCRUD API(GET、POST、PUT、DELETE)を実装します。 Go言語は1.16.3、フレームワークはEcho v4.2.2、O…
データベース接続をするGo言語製HTTPサーバのDocker環境構築について紹介します。 『コンテナ上のHTTPサーバとデータベースの疎通確認をする』をゴールとします。 Goは1.16.3、データベースはMySQL 8….
Go言語でデータベースに接続するための方法について紹介します。 今回はMySQLを利用します。 Go言語でデータベースへ接続する手順 以下では各手順について紹介します。 データベース接続のパッケージをインポート データベ…
RubyMineとDockerを連携し、コンテナの起動やDocker環境のデータベースをRubyMineから実行する方法について紹介します。 今回は以下のようなRailsとMySQLを組み合わせたDocker Compo…
こんにちは。@nishina555です。 前回、遅いクエリを突き止める!MySQLクエリ解析にスロークエリログを導入する手順でSQLのクエリ解析の手段としてスロークエリログをMySQLに導入する手順について説明をしました…
こんにちは。@nishina555です。 Webのパフォーマンス改善において、は非常に重要です。 特に、実行時間の長いものや試行回数の多いクエリを抽出することはチューニングの方向性を決める上で大事です。 MySQLではの…