タグ

mysqlとtipsに関するyukungのブックマーク (38)

  • MySQL 5.7 オプティマイザの改善〜UNION ALL〜 | RE:ENGINES

    はじめに Amazon RDSのMySQL 5.7で開発を行うことになりました。そこで、少しですがMySQL 5.7の機能を調べる機会がありましたので、今回は「UNION ALL」に関してのオプティマイザの改善について記載したいと思います。 「UNION」と「UNION ALL」の違い 先ずは、改めて「UNION」と「UNION ALL」の違いを簡単に説明しておきます。 UNION 結合対象のSELECT文の結果の全レコードを取得し、重複レコードを除去し返却します。 UNION ALL 結合対象のSELECT文の結果の全レコードををそのままつなげて返却します。 違いは結合した結果から、「重複レコードを除去するか、しないか」だけとなります。 MySQL 5.7での「UNION ALL」の改善とは 後ほど、「UNION」「UNION ALL」の実行計画の例を記載しますが、実行計画は単純であり、

    MySQL 5.7 オプティマイザの改善〜UNION ALL〜 | RE:ENGINES
  • B TreeとB+ Treeの違い - Carpe Diem

    概要 インデックスに対してMongoDBはB Treeを採用し、MySQLのInnoDBはB+ Treeを採用しています。 どうして採用しているアルゴリズムが違うのだろう?と思って調べてみました。 主な違い B+ TreeはほとんどB Treeと同じですが、以下の点が異なります。 リーフノードとリーフノードを結ぶポインタがある データはリーフノードのみに保持する 具体例 言葉だけだと分かりにくいので、Visualizeするツールを使って具体例を表示します。 [1, 2, 3, 4, 5, 6, 8, 10, 15, 18]という数列に対し、Order: 3で作ってみます。 Orderは1ノードから出る枝の数のことです。 B Tree B-Tree Visualization B+ Tree B+ Tree Visualization 先程のB Treeと違って、データはリーフノードに持つの

    B TreeとB+ Treeの違い - Carpe Diem
  • MySQLのEXPLAINを徹底解説!!

    以前、MySQLを高速化する10の方法という投稿で「EXPLAINの見方についてはいずれ解説しようと思う」と書いてしまったので、今日はその公約?を果たそうと思う。 MySQLのチューニングで最も大切なのは、クエリとスキーマの最適化である。スキーマの設計は一度決めてしまうとそのテーブルを利用する全てのクエリに影響してしまうためなかなか変更することは出来ないが、クエリはそのクエリだけを書き直せば良いので変更の敷居は低い。そして遅いクエリをなくすことは、性能を大幅に向上させるための最も有効な手段である。従って、アプリケーションの性能を向上させたいなら、まず最初にクエリのチューニングを検討するべきなのである。 最適化するべきクエリはスロークエリログやクエリアナライザで見付けられるが、ではそのようなクエリが見つかった場合にはどのように最適化すればいいのか?そのためにはまず現在どのようにクエリが実行さ

    MySQLのEXPLAINを徹底解説!!
  • Programming.log, [MySQL][EXPLAIN] typeフィールドの見方

    2014-09-09 [MySQL][EXPLAIN] typeフィールドの見方 mysql explain クエリの実行速度が速いものから順に紹介していく。 constテーブルで一致するレコードが1つで、クエリ開始時によみこまれるとconstになる。 テーブルを一度しか読み取らないので、typeフィールドに表示される値のなかで 最も速い。 PRIMARY KEYやUNIQUE INDEXが使用された場合に表示される。 eq_refJOIN や =演算子 でテーブルを結合した場合に、constと同じ条件(PRIMARY KEYかUNIQUE INDEXが使用される)の場合に表示される。 refテーブル結合で、インデックスの左端の先頭部分のみが結合で使用された場合、 または PRIMARY や UNIQUE ではないインデックスが使用された場合に表示される。 = または <=> 演算子で比較

    Programming.log, [MySQL][EXPLAIN] typeフィールドの見方
  • mysqlをdisる会 - Qiita

    はじめに やあ (´・ω・`) ようこそ、バーボンハウスへ。 このmysqlはサービスだから、まずsystemctl start mysqld して落ち着いて欲しい。 うん、「また」なんだ。済まない。 仏の顔もって言うしね、謝って許してもらおうとも思っていない。 でも、このタイトルを見たとき、君は、きっと言葉では言い表せない 「ときめき」みたいなものを感じてくれたと思う。 殺伐とした世の中で、そういう気持ちを忘れないで欲しい そう思って、この記事をかいたんだ じゃあ、注文を聞こうか。 というわけでmysqlをdisります。disるだけなので内容はありません。いいね? mysql には罠がいっぱい そうなんですよ罠がいっぱいなんですよ奥さん。 いやこれはおそらくmysqlに限った話ではないんですけど例えばこういうの! MySQLのチューニングなんてしたらパフォーマンス落ちるだけだし、デフォル

    mysqlをdisる会 - Qiita
  • Unicode Collation Algorithm - tmtms のメモ

    文字コードは面白いね! わーい! たのしー! 🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾🐾 MySQL で utf8mb4_unicode_ci コレーションを使用した時に「🍣」=「🍺」や「ハ」=「パ」になる問題があります。 この utf8mb4_unicode_ci ってなんぞや?と思ってマニュアルを見てみると、 MySQL は、http://www.unicode.org/reports/tr10/ で説明している Unicode 照合順序アルゴリズム (UCA) に従って xxx_unicode_ci 照合順序を実装します。照合順序は、バージョン 4.0.0 UCA 重みキー (http://www.unicode.org/Public/UCA/4.0.0/

    Unicode Collation Algorithm - tmtms のメモ
  • MySQL と寿司ビール問題 - かみぽわーる

    MySQL と Unicode Collation Algorithm (UCA) - かみぽわーる に関連するトピックで、 MySQL には寿司ビール問題というのがある。 寿司ビール問題どっかで詳しくお話を聞くべきだよなぁ。。。— RKajiyama (@RKajiyama) March 18, 2015 これはどういう問題かというと、 MySQL の Unicode では binary collation にしてコードポイントで比較しないと🍣と🍺に限らず絵文字が同値判定されるという問題です。 あれ? MySQL の utf8mb4 charset って、4バイト文字同士を比較すると同じ文字扱いされる? SELECT '🍣'='🍺' → 1 MySQL的には寿司とビールは同じ扱い。— とみたまさひろ (@tmtms) December 22, 2014 MySQLで select

    MySQL と寿司ビール問題 - かみぽわーる
  • Oracle -> MySQL SQL変換メモ - いっぽんの猟銃のむこうに (DAIZOじいさんとGun)

    ■システム日付 ・Oracle SYSDATE ・MySQL NOW()■日付型→文字列型変換(YYYY/MM/DD) ・Oracle: TO_DATE(TO_CHAR(SYSDATE), 'YY-MM-DD') ・MySQL: DATE_FORMAT( SYSDATE() , '%Y-%m-%d')■TRUNC(日付) ・Oracle TRUNC(SYSDATE) ・MySQL DATE(SYSDATE())■ADD_MONTH ・Oracle ADD_MONTHS(SYSDATE, 1) ・MySQL DATE_ADD(SYSDATE(),INTERVAL 1 MONTH)■MONTHS_BETWEEN ・Oracle MONTHS_BETWEEN(SYSDATE, SYSDATE+1) ・MySQL DATEDIFF(SYSDATE(), SYSDATE()+1)■TO_NUMBER

    Oracle -> MySQL SQL変換メモ - いっぽんの猟銃のむこうに (DAIZOじいさんとGun)
  • SQLの観点から「Oracle Database」「PostgreSQL」「MySQL」の特徴を整理しよう! | アシスト

    SQLの観点から「Oracle Database」「PostgreSQL」「MySQL」の特徴を整理しよう! 企業の情報システムで利用されているRDBMSでは、近年は商用データベースだけでなくオープンソース・データベースを併用するケースも増えており、選択肢は多様化しています。ご存じの通り、SQLRDBMS共通の言語ですが、実際は細かな記述の違いやRDBMS独自の機能が多数存在します。そのため、例えば商用データベースからオープンソース・データベースに移行したり併用したりすると、アプリケーションの改修コストや、意図した通りに動作しないといった問題が発生する場合があります。記事では、SQLの視点からRDBMSの主な差異を紹介し、異なるRDBMSに移行する際の注意点やRDBMS選定のポイントに迫ります。

    SQLの観点から「Oracle Database」「PostgreSQL」「MySQL」の特徴を整理しよう! | アシスト
  • インフラ構築手順書 OracleからMySQLへのマイグレーション時に発生した問題点

    HOME   » »  OracleからMySQLへのマイグレーション時に発生した問題点 DB構築 MySQL構築手順  »  OracleからMySQLへのマイグレーション時に発生した問題点 OracleからMySQLへのマイグレーション時に発生した問題点 Oracle10gからMysql5.5へマイグレーションを行った際に遭遇したエラーや問題点をまとめました。 Mysqlのマイグレーションを考えている方の参考にして頂ければ幸いです。 ■OracleからMySQLへのマイグレーション時に発生した問題点 ・行サイズの上限問題 ・カラムの中の改行問題(explanation) ・Nullインポート問題 ・OracleのDATE型(yy-mm-dd)をMysqlにインポートする際の不具合 ・余分な空白が入る ・OracleのCLOB出力問題 ・ミリ秒問題 ・文字化け 行サイズの上限問題 Inn

  • OracleベースのWebアプリをMySQLベースに移行した(最終回) - 101仕事日記 - tn101 - builder by ZDNet Japan

    今回のエントリーが最終回です。 内容は「Webアプリケーションの改変(基的にはSQL文)」についてです。 1)日付データの編集は? (to_char <-> date_format) 2)SEQUENCEの移行は? (SEQUENCE <-> auto_increment) 3)where句で使うrownumは? (rownum <-> limit) 4)NVL関数は? (nvl <-> ifnull) 5)CHR関数を使った「改行コード」の変換は? 6)そのまま使えた同一構文の関数 7)Oracle固有の表の外部結合を標準SQL化 8)日付型にNULLを許さないMySQL 9)DUAL表を使ったSQL文は? 10)弊社製品101NEO固有の問題 11)データベース接続について 参照:MySQLSQLリファレンス 参照:OracleSQL言語リファレンス Oracle SQL> se

  • OracleベースのWebアプリをMySQLベースに移行した(2) - 101仕事日記 - tn101 - builder by ZDNet Japan

    新OSのWin11はどう進化したか ビジネス上の役割、開発の要因と Win11が目指した5つのポイントを紹介 注目急上昇中のDaaS最新情報 コロナ禍を背景に利用者と機能を拡大中 Azure Virtual Desktop最新情報 電話営業・インサイドセールの革新 AIによる自動文字起こし・会話分析が 音声コミュニケーションの可能性を拓く 年間5,000件の問い合わせに対応 疑問を解消したいユーザーも答える情シスも みんな幸せになるヘルプデスクの最適解 コーマス広告の大変動 プライバシー保護とパーソナライズの狭間で マーケティングの効果を最大化するためには データ活用は次のステージへ トラディショナルからモダンへ進化するBI 未来への挑戦の成功はデータとともにある 全世界22万以上の企業・組織で採用 DX時代の顧客価値創出に大きな役割を担う CI/CD環境の現実解を紐解く リモートワーク

  • OracleベースのWebアプリをMySQLベースに移行した(1) - 101仕事日記 - tn101 - builder by ZDNet Japan

    6月初めごろから始めたOracleベースのWebアプリケーションのMySQL化が完了しました。 BLOGへのエントリーがタイムリーでないのが、いまいちですが。。 基的な作業タスクは以下の通りです。 ・MySQL環境の構築 ・データベースの移行(OracleからMySQLへ) ・Webアプリケーションの改変(基的にはSQL文) MySQLRailsのチュートリアルで使用する程度で簡単にしか触ったことがなかったので当にリアルに使っているWebアプリケーションが簡単に移行できるかは全くわかりませんでした。 実際にやってみると予想以上に簡単に移行できました。 工数的には4人日程度です。 アプリケーション規模は以下の通り ・テーブル数:18テーブル ・画面数:30画面 ・CSV出力アプリ:1 アプリケーションの概要はユーザマニュアル/管理者マニュアルを参照してください。 MySQLは、日

  • DB移行の7つのステップ

    データベース移行ではどのような作業を行わないといけないのか?全体的な流れを俯瞰的に見なければ、作業の見積もりなどが難しいことだろう。というわけで、今日はデータベース移行時に必要になる作業について7つのステップに分けて紹介しようと思う。言うまでもないことであるが、移行時には既存システムを直接いじるわけではない。(稼働中のシステムを直接いじるのは、走ってるクルマに乗り込むのと同じぐらい危険な行為である!!)開発用のシステムを別途用意して作業を進めるという前提で読んで欲しい。 1. データベース構築まずは何はともあれ新規データベースを構築することである。MySQLであれば典型的な構成にしておけばそれなりに高速に動作するので、細かいチューニングは後で問題が出てからやれば良い。my.cnfはインストールディレクトリの下のsupport-filesディレクトリにあるものを弄ってもいいし、MySQL P

    DB移行の7つのステップ
  • SYSDATE()とNOW()の違い。

    MySQLには、現在時刻を求める関数としてSYSDATE()とNOW()という2つの関数が実装されている。そして、それらは微妙に動作が違う。SYSDATE()は関数が呼び出された瞬間の時刻を返すのに対して、NOW()はクエリ開始時の時刻を返す。例えば、100秒かかるような長いクエリにおいて両者を利用した場合、SYSDATE()では結果に最大100秒の差が生じるのに対して、NOW()では差が生じない。NOW()では関数が最初に実行された時に結果がキャッシュされ、以降はキャッシュされた値が利用されるからだ。 次のようにSLEEP()を利用するとわかり易いだろう。 mysql> SELECT SYSDATE(), SLEEP(100), SYSDATE(); +---------------------+------------+---------------------+ | SYSDATE(

    SYSDATE()とNOW()の違い。
  • MySQL 5.6 でのレプリケーション遅延は危険 : DSAS開発者の部屋

    MySQL 5.6 の検証中に MySQL 5.5 とは違うタイプのレプリケーション遅延を見つけたので紹介します。 MySQL のレプリケーションのおさらい MySQL のレプリケーションは次のような仕組みで動作しています。 マスターの更新トランザクションが binlog を書く スレーブの I/O スレッドがマスターに接続し、 binlog を取得し、 relaylog を書く. マスター側はスレーブからの接続を受け付けると(dump スレッド)、指定された場所から最新までの binlog を転送する binlog が追記されるのを待ってさらにスレーブに送る スレーブのSQLスレッドが relaylog を再生する MySQL 5.5 でよくあったレプリケーション遅延 マスターは並列してトランザクションを処理して、最終的にコミットした順で反映されれば問題ないようになっています。 一方、ス

    MySQL 5.6 でのレプリケーション遅延は危険 : DSAS開発者の部屋
  • MySQLの日付型の扱い方や機能をまとめてみました

    小数部の領域、とありますが、これは0~3 bytesです。小数部が1, 2桁なら1 byte、3, 4桁なら2 bytes、5, 6桁なら3bytesです。 TIMESTAMP型の値の範囲 TIMESTAMPはいわゆるUNIX時間、time_tで、1970年から始まる日付であり、4byteです。そのため、2038年までしか格納できません。MySQLだけではありませんが、2038年問題というものです。利用する時は気を付ける必要があります。 TIMESTAMP型のデータ保持形式(UTC) マニュアルにTIMESTAMPは内部でUTCで持つと書かれています。これがどういうことなのか確かめてみます。 まずは以下のコマンドを実行してみます。 create table TIMESTAMP_SAMPLE(DT datetime, TS timestamp); insert into TIMESTAMP_

  • MySQLスレーブのmy.cnfにはreport-hostを必ず書こう

    (2012.10.15追記) report-hostではなくslave-hostになってたと@ishikawa84gさんから指摘を受けたので修正。 これで、マスターでshow slave hostsコマンドを打つだけで、スレーブの一覧が表示される。 > show slave hosts +----+------+--+----+ | Server\_id | Host | Port | Master\_id | +----+------+--+----+ | 16800111 | nanikano-dbs01 | 3306 | 16800101 | | 16800112 | nanikano-dbs02 | 3306 | 16800101 | | 16800113 | nanikano-dbs03 | 3306 | 16800101 | +----+------+--+----+ repo

  • MySQL Connector/J を利用するときは cacheServerConfiguration=true を設定する - tokuhirom's blog

    MySQL は一般に接続コストが低いことで知られており、コネクションプーリング等しなくても使えるので便利。 だが、Java 用の MySQL Driver であるところの MySQL Connector/J はデフォルトでは数個のクエリを接続時に発行しており、デフォルトのままでは無駄に負荷がかかる。 デフォルトでは以下のように4つの準備クエリが発行される! どう考えてもおかしいですよね!やばいっす! 150108 9:18:11 5 Connect root@localhost on test 5 Query /* mysql-connector-java-5.1.34 ( Revision: [email protected] ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_

  • naoyaのはてなダイアリー - MyISAM vs InnoDB

    あくまで憶測で仮説でしかないんですが。 MySQL のストレージエンジンのうち代表的な二つ、MyISAM と InnoDB はよく MyISAM: Read は速いけどテーブルロックのため並行性が低い。運用が簡単。 InnoDB: MyISAM より Read は遅いけど並行性が高い 。行レベルロックなので。あとトランザクションや外部キー制約。運用が MyISAM よりちょっとめんどくさい。 という区別がされます。ここから転じて、 MyISAM は参照系クエリが大部分を占める場合に適用すると良い。例えば blog アプリケーションとか。 InnoDB は更新系クエリが多い場合に適用すると良い。 と言わたりします。実践ハイパフォーマンスMySQL でも第2章 ストレージエンジン(テーブル型) P.30 に アプリケーションでトランザクションを使用する必要がなく、主に SELECT または I

    naoyaのはてなダイアリー - MyISAM vs InnoDB