タグ

ブックマーク / nippondanji.blogspot.com (15)

  • MySQLのZero Dateへの対処法

    MySQLのZero Dateへの対処法 MySQLの0000-00-00 00:00:00は使ってはならない - そーだいなるらくがき帳 このエントリで、MySQLのゼロが含まれる日付け、いわゆるZero Dateについての問題点が色々挙げられているのを見かけたので、手短に対処法を述べておきたい。 Zero Dateが存在する理由なぜそんな厄介なデータが存在するのかというのは、開発の経緯や互換性といった深淵な理由からなので気にしないで欲しい。まあ、人間は完璧ではないので、人間が作るプログラムも完璧ではないということだ。 当然ながらSQL標準から外れているものは、例外的な使い方をしたい場合を除き、使うべきではない。アンチパターンも使い方次第という話もあるが、例外的な使い方は基的に苦労が増えるので使うべきではない。 SQLモード実は、Zero DateはSQLモードで禁止できる。SQLモー

    MySQLのZero Dateへの対処法
    shaw
    shaw 2018/05/15
  • MySQL 8.0登場!立ち止まることを知らない進化はこれからも続く。

    ゴールデンウィークはいかがお過ごしされただろうか。今年は天気も良く、行楽日和が続いたように思う。 さて、先日MySQL 8.0が正式にリリースされた。少し時間が経ってしまったが、今回はMySQL 8.0の新機能について紹介したい。コミュニティ版のダウンロードはこちらから可能だ。 ひとつ前の正式バージョンはMySQL 5.7だったのだが、MySQL 8.0は非常に大きなリファクタリングが含まれており、5.x台のバージョン番号を捨て去ろうという話があった。そこで、次のメジャーバージョンは最初の桁を増やすということになったのだが、MySQL 6.0は過去に既に存在し、買収などの騒ぎで開発が頓挫してしまった経緯がある。7.xはMySQL NDB Clusterと被っている。というわけで、5.7の7の部分の次という意味合いもあって、8.0というバージョン番号を引っさげ、満を持しての登場となった。その

    MySQL 8.0登場!立ち止まることを知らない進化はこれからも続く。
    shaw
    shaw 2018/05/07
  • フォントは自由に変えられる。だから絵文字で何かを伝えるのはナンセンス。そんなことも分からなかったのか、Googleよ。

    Unicodeに絵文字が多数追加されたことは、以前から批判していたのだが、やはりというか何と言うか、しょっぱい問題が起こりつつある。 macOS SierraやiOS 10でピストル絵文字🔫が水鉄砲に変わることで起こる問題。 | AAPL Ch. 絵文字フォント次第で形が変わる。故にフォントが変わればニュアンスも変わる。自分と相手、あるいは今使っている機種と将来使う機種が同じフォントを使っているとは限らない。だからフォントを変更することで様々な問題が起きるわけである。 根的な問題=性質が異なるものを混ぜてしまった文字と絵は質的に性質が違う。 文字はその見た目ではなく、文字を組み合わせた単語、単語を並べた文章によって意味を持つ。フォントが違っても、見た目の違いはあれど、文章そのものの意味は変わらない。どのようなフォントで読んでも意味は通じるのである。 ところが、絵文字はそうは行かない

    フォントは自由に変えられる。だから絵文字で何かを伝えるのはナンセンス。そんなことも分からなかったのか、Googleよ。
  • MySQL 8.0.0 Development Milestone Release登場!!

    先月、詳解MySQL 5.7を発刊したばかりであるが、MySQL 5.7自体は去年の10月にリリースされたバージョンである。それから約1年弱、MySQLは開発の手を緩めること無く日々改良を重ねている。 そう、MySQL 8.0の登場である。 現在はDevelopment Milestone Release(通称DMR)という状態なので、まだ正式版における機能が固まっている段階ではないという点には注意して欲しい。MySQLの開発プロセスでは、DMRをリリースするごとにその段階で成熟した機能をマージする。DMRを何度かリリースした後に、キリの良いところでリリース候補版となって正式版で追加される機能が一応確定し、その後バグ修正を経て正式版(GA版)がリリースされる予定となっている。詳しくはMySQLのマニュアルを参照して欲しい。 バージョン8.0!!5.7の次は誰もが5.8だと思っていただろう・

    MySQL 8.0.0 Development Milestone Release登場!!
    shaw
    shaw 2016/09/23
  • MySQLのEXPLAINを徹底解説!!

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

    MySQLのEXPLAINを徹底解説!!
    shaw
    shaw 2016/08/17
  • Using filesort

    去年ソートに関する記事を書いたが、今日はその続きである。 MySQLでEXPLAIN SELECT...を実行するとExtraフィールドでよく見かける「Using filesort」という文字列。Filesortって一体なんだろう?と思ったことはないだろうか。単刀直入に言ってFilesortの正体はクイックソートである。 クエリにORDER BYが含まれる場合、MySQLはある程度の大きさまでは全てメモリ内でクイックソートを処理する。ある程度の大きさとはsort_buffer_sizeであり、これはセッションごとに変更可能である。ソートに必要なメモリがsort_buffer_sizeより大きくなると、テンポラリファイル(テンポラリテーブルではない)が作成され、メモリとファイルを併用してクイックソートが実行される。 Filesortは全てのソート処理において実行されるわけではない。前回の記事

    Using filesort
    shaw
    shaw 2016/08/09
  • 「優れたMySQL DBAを見分ける27+3の質問」に対する回答例

    随分と更新が空いてしまったが、「優れたMySQL DBAを見分ける27+3の質問」に対する回答例(漢バージョン)を紹介しよう。実は質問を掲載した際「難しい!」というコメントが非常に多く、もう少し易しい質問にするべきだったかと思って次のように呟いてみたのだが・・・ 非常に心強くて安心した。さすがに日を代表するMySQLのエキスパートである。出題のレベルは間違ってはいなかった!! そんなわけで、回答の方に移ろう。 MySQLのサーバープロセスはいくつある?ひとつ。mysqldはシングルプロセス・マルチスレッドモデルを採用しているので、"サーバー"プロセスはひとつである。多くの場合、Linuxなどでmysqldを動かす場合には、お供にmysqld_safeも常に動いていることが多いが、mysqld_safeはサーバーではなく、mysqldのためのラッパーであるので数には含めない。 rootユー

    「優れたMySQL DBAを見分ける27+3の質問」に対する回答例
    shaw
    shaw 2016/07/27
  • キーボードを新しくした話(ErgoDox)

    昨年の話になるのだが、キーボードを新調した。それまでは東プレのRealForceシリーズを、その前はPFUのHHK Proを使用していたのだが、どうにも満足できなくなってしまったのである。ちなみに、HHK ProからRealForceへ乗り換えた理由は、ファンクションキーが欲しかったからである。Linuxユーザーなのになぜファンクションキーなんて使うんだ!!邪道だ!!と思われるかも知れないが、邪道で結構。いろんな機能をショートカットキーとして登録したい私には必要だったのである。 さて題である。この度私が購入したキーボードを紹介しようと思う。 超自由度が高いオープンソースなキーボード、ErgoDoxRealForceやHHK Proを何故使っていたかというと、静電容量無接点方式のキーが良かったからである。日々膨大な回数のタイプをするため、ソフトなタッチで指が疲れないキーボードがほしかったの

    キーボードを新しくした話(ErgoDox)
  • 書籍出版のお知らせ:理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL

    来る2月27日、データベースの新書籍を発売させて頂くことになった。タイトルは「理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL」となっている。単に「データベース」と書いてあるが、RDBがメインのテーマの書籍である。 多くの人が未だにRDBを使いこなせていないのではないか。RDBの使い方をマスターするには何が必要なのか。それがここ数年私が追ってきたテーマであり、この書籍を出すことになった動機である。 あまりにも酷いDB設計、あまりにもスパゲティなクエリ、あまりにも希薄なデータモデルへの理解。そういった問題はどこから生み出されるのか。そのひとつの結論としてたどり着いたのが、「そもそもRDBの使い方があまり理解されていないのではないか」ということだった。名著、SQLアンチパターンでは「やってはいけないケース」について学ぶことができるが、その反対のテーマ、つまり来どの

    書籍出版のお知らせ:理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL
    shaw
    shaw 2015/02/03
  • 自由でオープンなウェブ終了のお知らせか?またはそれを守るために我々は何をするべきか。

    先日、MozillaがブラウザにEMEを採用することを発表してしまった。Mozillaには正直言ってがっかりだ。以前、DRMがウェブに持ち込まれようとしている未だかつてない危機というエントリで危惧していたことが現実になってしまった。フリーソフトウェア財団も今回のMozillaの発表に対して非難の声明を出している。 EMEがブラウザに搭載されるのは、自由でオープンなウェブにとって危機的な状況であると言える。今日はそのことについて警笛を鳴らしたいと思う。 ウェブは自由でオープンだから発展したそもそも、ウェブがこれだけ発展したのは、その仕様が自由でオープンだったからだ。現実にはブラウザごとにクセが強すぎるので半ば笑い話にしかならないが、建前上は互換性はあることになっている。そのため、ウェブページはどのブラウザあるいはOSであっても閲覧することができる。中にはサポートしていないブラウザを拒否するよ

    自由でオープンなウェブ終了のお知らせか?またはそれを守るために我々は何をするべきか。
  • MyISAMからInnoDBへ切り替えるときの注意点

    MySQLを使い始めて間もない人がよく陥る罠の中に、気づくと使ってるストレージエンジンがMyISAMだった!ということがある。デフォルトのストレージエンジンはMyISAMなので、MySQLに詳しくない人たちが比較的陥りやすい罠なのだ。そもそもストレージエンジンという概念自体がMySQL独自のものなので仕方のない話である。MyISAMは素晴らしいストレージエンジン(たとえばこのYahoo!の中の人による投稿で言われているように)であるが、長所もあれば短所もある。例えば、 トランザクション対応ではない。 クラッシュセーフではない。 更新と参照が入り乱れた場合の同時実行性能がよくない。 テーブルが大きく(数億行とか)なるとINSERTの性能が劣化する。 などなど。特に前者の2つが問題で、アトミックな操作が必要なところでロジックを実装出来なかったり、サーバがクラッシュした時にデータがお亡くなりにな

    MyISAMからInnoDBへ切り替えるときの注意点
    shaw
    shaw 2011/09/12
  • ALTER TABLEを上手に使いこなそう。

    テーブル定義を変更したい。インデックスが壊れてしまったので再作成したい。そんな場合はALTER TABLEを使う。ALTER TABLEはテーブル定義を変更するお馴染みのコマンドであるが、その挙動は意外と知られていない。(エキスパートとおぼしき方々からも度々質問を受ける。)そんなわけで、今日はALTER TABLEについて解説しようと思う。 まず結論から言うと、なんとMySQLのALTER TABLEはテーブルのデータを全てコピーし直すのである。なんて無駄なことを!?と思うかも知れないが、テーブル定義(スキーマ)の変更を動的に行うには、ストレージエンジンによるサポートが必要であり、動的なスキーマ変更をサポートしているストレージエンジンはまだ少ないのである。(動的スキーマ変更をサポートしているのはMySQL Clusterぐらいだ。しかも追加だけ。)デフォルトで利用出来るMyISAMはInn

    ALTER TABLEを上手に使いこなそう。
    shaw
    shaw 2011/07/21
  • 漢(オトコ)のコンピュータ道: モダンなMySQLの開発環境の構築方法

    遅ればせながら モダンな Perl の開発環境の構築方法 モダンなPHPの開発環境の構築方法 モダンなPythonの開発環境の構築方法 モダンな Java の開発環境の構築方法 に続いてみる。MySQLは言語じゃないけど。 コンパイラ等MySQLをソースからビルドするのでなければコンパイラ等は必要ないけど、どうせアプリ開発に必要なので「MySQLなんかいつでもハックしてやるぞ!」という意気込みを示すために入れておこう。OSXならXcode、LinuxならGCC。最新のソースコードじゃないとヤダ!という粋な人にはBazaarのインストールもお勧めしたい。Bazaarは言わずと知れた分散バージョン管理システムであり、MySQL開発チームも採用している。最新のソースコードは次のコマンドでゲット可能だ。 shell> bzr branch lp:mysql-server/5.1 mysql-5.1

    漢(オトコ)のコンピュータ道: モダンなMySQLの開発環境の構築方法
    shaw
    shaw 2010/07/28
  • 漢(オトコ)のコンピュータ道: InnoDBでCOUNT()を扱う際の注意事項あれこれ。

    InnoDBを使うとき、MyISAMと比較して度々やり玉に挙げられるポイントとして「COUNT()が遅い」というものがある。確かにInnoDBにおいて行数を弾き出すのにはテーブルスキャンが必要なのだが、そもそもMyISAMのCOUNT()が速い(テーブルの行数を保持してる)のが特殊なのであって、InnoDBが遅いわけではないのである。とはいえ、高速なCOUNT()については需要が多く、この問題には多くの人取り組んでおられるようだ。しかしながら、COUNT()のチューニングについては未だ語られていない点があるように見受けられるので、今日はCOUNT()のチューニングについて解説しようと思う。 COUNT(*)、COUNT(col)、COUNT(1)の違い基的なことではあるが、COUNT(*)とCOUNT(col)では意味が異なるため、異なる結果が返される場合がある。COUNT(*)はフェッ

    漢(オトコ)のコンピュータ道: InnoDBでCOUNT()を扱う際の注意事項あれこれ。
    shaw
    shaw 2010/03/10
  • 漢(オトコ)のコンピュータ道: MySQLを高速化する10の方法

    ちょっとキャッチ−なタイトルをつけてしまったが、今日は独断と偏見でMySQLを高速化する方法を10個紹介しよう。MySQLサーバをチューニングするときや初期導入する場合などに参考にしてもらいたい。 1. バッファを増やす、または減らす チューニングの基中の基であるが、適切なバッファサイズを設定することはパフォーマンスチューニングの要である。主なバッファは次の通り。 innodb_buffer_pool_size・・・InnoDBだけを利用する場合は空きメモリの7〜8割程度を割り当てる最も重要なバッファである。余談だが、実際にはここで割り当てた値の5〜10%ぐらいを多めにメモリを使うので注意が必要だ。 key_buffer_size・・・MyISAMだけを利用する場合は、空きメモリの3割程度を割り当てるといい。残りはファイルシステムのキャッシュ用に残しておこう。 sort_buffer_

    漢(オトコ)のコンピュータ道: MySQLを高速化する10の方法
    shaw
    shaw 2009/02/19
  • 1