タグ

ブックマーク / gihyo.jp (5)

  • 第97回 JOIN_ORDERを使ってJOINの順番を決める | gihyo.jp

    MySQL 5.7とそれ以前では、テーブルの結合を実施する際に、INNER JOINの場合はSTRAIGHT_JOINを利用し結合することで、テーブルのなかで先に読み取りを行うテーブルを決めることができました。最新バージョンのMySQL 8.0からは、Join-Order オプティマイザヒント句を用いてJOINする順番を決めることができるようになりました。 今回は、従来のSTRAIGHT_JOINJoin-Order オプティマイザヒント句の使い方を確認していきたいとおもいます。なお、使用しているMySQLは8.0.15,OSはCentOS7を利用しています。 STRAIGHT_JOIN STRAIGHT_JOINは、JOINを行う際に対象のテーブルの駆動表を固定したいときに使われる構文です。STRAIGHT_JOINを用いてJOINを行うと、先に出てきたテーブルを駆動表として扱い、IN

    第97回 JOIN_ORDERを使ってJOINの順番を決める | gihyo.jp
    katsush
    katsush 2022/01/23
    “STRAIGHT_JOINは指定した順番を強制させるものでしたが,JOIN_ORDER,JOIN_PREFIX,JOIN_SUFFIXは順番を強制しないので,オプティマイザがコストが高いと判断した場合は選択されない可能性があります。”
  • 第66回 MySQL準同期レプリケーションについて | gihyo.jp

    MySQLのレプリケーションはデフォルトでは非同期で行われます。そのため、マスターの更新が必ずスレーブへ転送されたか保証はしません。 これを実現するしくみとして、MySQL5.5とそれ以降からは準同期レプリケーション機能を使用できます。今回は準同期レプリケーションについて紹介します。MySQLのバージョンは最新の5.7.21を使用しています。 準同期レプリケーションとは 準同期レプリケーションは、マスターの更新がスレーブに適用ではなく、伝搬されたことを保証する仕組みです。 コミットしたトランザクションはマスターから1台以上(オプションで変更可能)のスレーブに伝搬し、受け取ったスレーブ(I/Oスレッド)が通知をマスターに返したところでコミットが完了となる仕組みです。よって、スレーブ側で適用されたことまでは保証されないので、完全同期ではなく準同期と呼ばれます。 更新データの伝搬後にSQLスレッ

    第66回 MySQL準同期レプリケーションについて | gihyo.jp
    katsush
    katsush 2021/08/09
    Loss-Less Semi-Synchronous Replication
  • 第117回 MySQL 8.0のオプティマイザーヒント | gihyo.jp

    MySQLでは、オプティマイザーヒントを使用してオプティマイザーを制御することで、実行計画を変更することができます。このオプティマイザーヒントはステートメントに適用できるため、ステートメント単位で最適化が可能になります。MySQL 5.7とそれ以降から使用可能です。 今回は、MySQL 8.0から追加されたオプティマイザーのヒントを主に紹介したいと思います。 オプティマイザーヒント構文 オプティマイザーのヒントは/*+ ... */をステートメント内に記述します。SELECT、UPDATEやDELETEなどのDMLのキーワードの後にヒントを記述します。ヒントの内容をパーサーが認識して処理します。以下のように記載します。 mysql> SELECT /*+ hint */ ... mysql> UPDATE /*+ hint */ ... 指定したヒントが有効か確認するには、EXPLAIN後

    第117回 MySQL 8.0のオプティマイザーヒント | gihyo.jp
  • 第138回 オンラインスキーママイグレーションツール gh-ostを使ってみよう[その1] | gihyo.jp

    今回から3回に渡って、GitHub社がOSSとして公開しているオンラインスキーママイグレーションツール gh-ostについて紹介したいと思います。 はじめに、MySQLのオンラインスキーママイグレーションというとMySQL 5.6からオンラインDDLがあります。これにより、並列でDMLが実行されてもロックすることなくスキーマ変更が可能です。特に、MySQL 8.0からのInstance Add Columnは、テーブルをリビルドすることなく即時でカラム追加が完了するといううれしい機能です。 しかし、int型からbigint型へなどの型変更を伴うALTERステートメントなど、いくつかの操作は並列のDMLが許可されない、つまりそのテーブルが全体ロックされるような動作になります。加えて、レプリケーションの遅延が発生する可能性もあります。このように、操作の種類によってAlter中にできる動作が異な

    第138回 オンラインスキーママイグレーションツール gh-ostを使ってみよう[その1] | gihyo.jp
  • 第144回 MySQLの<=>演算子を使ってみる | gihyo.jp

    皆さんはカラムにNULLが入らないようにするNOT NULL制約を積極的に使っていますか? もし使うにしても、どうしてもカラムにNULLを入れる必要があったり、過去からのしがらみなどから、どうしても付けられていないという場合もあると思います。そんな時に、厄介に感じるのはNULL値の値です。NULL値の比較に通常の=による比較演算子を使用すると、想定した結果が得られないためバグにつながる可能性もあります。 今回は、NULL値が入る可能性がある場合に便利な<=>演算子について紹介していきます。 検証環境 今回は第125回 phpMyAdminでDockerで建てたMySQLにアクセスするで記載したdocker-composeを利用して作成します。手元で簡単に試せるように、GitHubのわたしのレポジトリにサンプルコードとして置いてあるので、気軽に試したい方はgit cloneして試してみてくだ

    第144回 MySQLの&lt;=&gt;演算子を使ってみる | gihyo.jp
    katsush
    katsush 2021/07/24
    NULLでも使えるMySQLの演算子 “MySQLの公式のドキュメントでは「NULL-safe equal」や「NULL安全等価演算子」と呼ばれます。”
  • 1