カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
https://mariadb.com/kb/en/optimizer-switch/にあるように、MariaDBのオプティマイザはかなり改良されている。 では、MariaDBのオプティマイザ/エクゼキュータはどの程度優秀か、4つのSELECT文の実行を通してMySQLと(ついでにPostgreSQLと)比較してみる。 (2014.12.3追記:オプティマイザについては省略してますが、こんな本がでます。) 結論を先にいえば「MySQLは検索が速い」というのは都市伝説。MariaDBはがんばってるけどPostgreSQLにはまだまだ及ばず。 *念のため。これはベンチマークじゃないよ、オプティマイザ/エクゼキュータの機能比較です。 自分で再確認したい場合はこちらにスクリプト群と実験のやり方を簡単に書いたので参照のこと。 調査環境 同一マシンにMySQL5.6.14、MariaDB10.0.4、
(2014.12.3追記:このblogの内容は、以下の書籍にも反映させた。) SQLレベルの差異 MariaDB5.5とMySQL5.5ではSQLレベルでの違いはほとんどなかった。autoincrementの最大値の扱いくらい。 ただし、MariaDB10.0でREGEXPがマルチバイト対応になったので、アプリ側は注意。 項目 MySQL MariaDB Autoincrement 最大値に達すると、以降は最大値を繰り返す。Warningのみ。エラーにならない。tinyintなら…,125,126,127,127,127… 最大値-1まで。以降はエラーを返す。tinyintなら…,125,126,ERROR,ERROR,… EXPLAIN文 JSON形式 バージョン5.6から 未対応 Optimizer Trace バージョン5.6から 未対応(ただし、MariaDBのほうがオプティマイザ
MySQL に限らず、SQL のNULL の仕様には何回か「えっ」と驚くことがあったのでメモしておこうと思います。5.1 版の日本語マニュアルがなかったものについては、4.1 のマニュアルを参照しました。 そもそもNULL は何を意味するか NULL は未定義または、不明を意味する。「電話番号を持たない」ということを表現する場合は、NULL ではなく、空の文字列を使う。 NULL 値というものを SQL 初心者はよく混乱します。SQL 初心者は、多くの場合、NULL が空文字 "" と同じであると考えてしまいます。これは違います。たとえば、以下のステートメントは完全に別のものです。 mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES (""); どちらのス
SQLServer(T-SQL)で1行のInsert文で複数件のデータを一気に挿入することはできないのでしょうか? 実はSQLServer(T-SQL)で1行のINSERT文で複数件挿入するには「VALUES以降をカンマで区切って」渡せば挿入できます。 ただし挿入できるのは最大1000行までです。 それ以上の場合はINSERT文を分けて実行する必要があります。 具体的には通常のInsert文のVALUES以降を「,(カンマ)」で続けて書いていくことで可能になります。 INSERT INTO test_table VALUES ( 1, 'NAME1', 10 ) ,( 2, 'NAME2', 20 ) ,... 注意としては1つでもエラーの発生するVALUESが存在すると、すべてのデータが挿入がCommit(コミット)されずRollBack(ロールバック)されてしまいます。(1件のデータも
ホーム / ご案内 / パフォーマンス1000%UP!PHPでMySQLのDB処理を行うと重いときに行うパフォーマンス施策~基礎編~ DBを使うとやたらと重くなって仕方がない。。。 個別案件でヘルプが必要な方は Linuxに関するアドバイスを行います!WEB・メール・DB・DNSサーバーどんなことでも! そうお悩みのプログラム初心者の方も多いのではないでしょうか。 いろいろQ&A的なサイトを見ていても初心者の方の多い質問の一つが【重い】という内容です。 しかしながら、インデックスはかかっているのか?とか、メモリが足りないとか。。。確かに、そういった要件はあるかもしれませんが、もっともっと初歩的なところでつまづいていませんか? そういう初心者のためにこの記事を書き残しています。 おそらく、バージョンやDB自体が何であるとか、そういった問題の前に基礎的なところができていない方が多いかもしれない
今日も前回に引き続きデータベース設計の話をする。今回の話で一旦データベース設計については筆を置くつもり(ブログ書いてないで原稿書けよ>俺)であるが、その前に話をすっきりさせて置きたいと思う。最後を飾るテーマはIDの設計である。 数字しかないのに意味を含んだID前回のエントリを見ていただいた方から、次のような構造を持った学籍番号があるというフィードバックを頂いた。 全部数値で"入学年度下2桁"+"学科コード"+"学科内のあいうえお順の順位" このようなルールで割り当てた学籍番号を、単なる数値として扱うのであれば大きな問題はない。これは数値しか含まれていないので、SQLのデータ型としては単に数値型を使えば良いだろう。だが、学籍番号から入学年度を判断する、あるいは学科を判断するといった用途で使われるのであればやはり適切ではないといえる。リレーショナルモデルの観点だけからではなく、IDとして適切で
先日、作っているアプリケーションにバグが発生しました。バグの内容は次のようなものでした。 同時に存在してはいけないはずのデータが、DB に存在する 整合性のチェックはアプリケーションレベルで行っている 一意制約のような単純なものではないので、アプリケーションレベルで実装 整合性のチェックロジックは正しい これに対し、バグは次のような状況で発生したと仮説を立てました。 ユーザがレコードを一括登録しようとする 登録ボタンを押したがレスポンスが遅い この間、整合性チェックが走っている ユーザはもう一度登録ボタンを押した 2回目の登録の整合性チェックが走り始める 1回目の登録の整合性チェックが完了、INSERTが始まる 2回目の登録の整合性チェックが完了、INSERTが始まる 2回目の登録の整合性チェックの間、DBにはまだ1回目の登録によるINSERTが実行されていないので、チェックを通過した 結
MySQL 編2 - ODBC + VB ADO、テーブル作成、レコード更新、レコード参照 ■MySQL ODBC + VB ADO テーブル作成 ・テーブル作成で、日本語項目名が指定できるかテストする。 問題なく作成できる。 Dim cn As Variant Dim sql As String '** ODBC 接続 Set cn = CreateObject("ADODB.Connection") cn.Open "dsn=MySQL;uid=sak;pwd=" cn.CursorLocation = 3 '** テーブル作成 sql = "create table testm (" sql = sql & "キー char(008)," sql = sql & "データ1 int8," sql = sql & "データ2 int8," sql = sql & "データ3 int8"
+----+----------+------------+---------+ | id | group_id | updated_at | comment | +----+----------+------------+---------+ | 1 | 1 | 2013-12-01 | C | | 2 | 2 | 2013-12-01 | A | | 3 | 1 | 2013-12-02 | B | | 4 | 2 | 2013-11-30 | D | +----+----------+------------+---------+ CREATE TABLE sample_table ( id int(11) NOT NULL, group_id int(11) NOT NULL, updated_at date NOT NULL, comment varchar(60) NOT NU
もうこれは文化の違いです。MySQL なんてオモチャはダメという 人もいれば、MySQL で何十億レコードでもいけるよ! という人も います。 以下、おもうところをつらつらと書いてみます。 ●機能 違いは多々ありますが、個人的には表層的な問題と思い ますので、ここでは触れません。 ●経験の有無 わたしは Oracle・MySQL 使いですが、DB2 とか SQLServer を使ってと言われると尻込みします。DB2 や SQLServer が 悪いと言っているわけではありません。よく知らない世界 だからです。 上司の方も知らない世界に飛び込むのは怖いでしょう。MySQL を 推したいのであれば、その不安を解消するために、 「わたしが詳しいので社内教育しますよ」 「有償サポートありますよ」 「圧倒的にコストが違いますよ」 「まずはプロトタイプ開発で MySQL 使ってみませんか?」 など、上
トランザクションとは 1つの作業単位として扱われるSQLクエリの集まりです。 複数のUPDATEやINSERTをひとつの集まりとして、 それらのクエリがすべて適用できた場合のみデータベースに反映します。 ひとつでも適用に失敗したクエリがあった場合は、そのまとまりすべてのクエリの結果は反映しません。 ACID特性 トランザクション処理に求められる4つの特性です。 原子性 (Atomicity) トランザクションに含まれる手順が「すべて実行されるか」「すべてされないか」のどちらかになる性質。 一貫性 (Consistency) どんな状況でもトランザクション前後でデータの整合性が矛盾なく保たれる性質。 分離性 (Isolation) トランザクション実行中は、処理途中のデータは外部から隠蔽されて他の処理に影響を与えない性質。 永続性 (Durability) トランザクションが完了したら、シス
最近マイブームのEntity Framework。データベースマイグレーションなんかも簡単にできちゃうし、とても便利なフレームワーク(O/Rマッパー)です。 Entity Framework Code Firstに関する解説なんかも書いちゃったりしてます( http://densan-labs.net/tech/codefirst/ )。 O/Rマッパーはとても便利なものですが、どんなクエリをSql Serverに対して発行しているかをキチンと理解して使わないと、時々痛い目を見ます。例えば、EFを使ってデータをInsertするには、以下のようなコードを書きます。 using (var context = new DbContext()) { context.Models.Add(new XXXModel{ ... }); context.SaveChanges(); }単純にデータをSql
MySQL Utilitiesならではの注意点 MySQL Utilitiesは従来のコマンドラインツール群とは違い、以下のような記述で接続先を指定します。 これは、従来のコマンドラインツール群が主に1つのMySQLサーバーを対象として動作するものなのに対して、MySQL Utilitiesは2つ以上のMySQLサーバーを対象として動作するものが多いため、このような記法になっています。 [MySQL Utilitiesの記法] --server=ユーザ名:パスワード@ホスト名:ポート番号 [MySQL コマンドラインツール群の記法] --user=ユーザ名 --password=パスワード --host=ホスト名 --port=ポート番号 なおWindows環境ではローカルホストとしてlocalhostと127.0.0.1のどちらを指定しても同じですが、LinuxやUNIXではホスト名に対
ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門 広く浅くを担当してます、ota です。 技術ブログ第一回から早速流用スライドで申し訳ありませんが、社内勉強会資料として作成した「MySQL INDEX + EXPLAIN入門」です。 当社でもソーシャルゲームの開発を行っていますが、このような大量のデータを使用する・クエリの速度が求められる場合にインデックスは大変重要です。 インデックスの有効な利用にはDB設計者だけではなくプログラマにもある程度の知識が最低限必要となりますが、インデックスについての初心者向け資料があまりないようです。 このスライドではプログラマに知っておいて欲しい以下の基本的な点をまとめました。 INDEXを使用する時に気をつけること WHERE句 !=、<>はインデックスが使用できない WHERE句の全てのANDにかかっていないイン
Ringとは、リクルートグループ会社従業員を対象にした新規事業提案制度です。 『ゼクシィ』『R25』『スタディサプリ』など数多くの事業を生み出してきた新規事業制度は、 1982年に「RING」としてスタートし、1990年「New RING」と改定、そして2018年「Ring」にリニューアルしました。 リクルートグループの従業員は誰でも自由に参加することができ、 テーマはリクルートの既存領域に限らず、ありとあらゆる領域が対象です。 リクルートにとって、Ringとは「新しい価値の創造」というグループ経営理念を体現する場であり、 従業員が自分の意思で新規事業を提案・実現できる機会です。 Ringフロー その後の事業開発手法 Ringを通過した案件は、事業化を検討する権利を得て、事業開発を行います。 さまざまな事業開発の手法がありますが、例えば既存領域での事業開発の場合は、 担当事業会社内で予算や
Ringとは、リクルートグループ会社従業員を対象にした新規事業提案制度です。 『ゼクシィ』『R25』『スタディサプリ』など数多くの事業を生み出してきた新規事業制度は、 1982年に「RING」としてスタートし、1990年「New RING」と改定、そして2018年「Ring」にリニューアルしました。 リクルートグループの従業員は誰でも自由に参加することができ、 テーマはリクルートの既存領域に限らず、ありとあらゆる領域が対象です。 リクルートにとって、Ringとは「新しい価値の創造」というグループ経営理念を体現する場であり、 従業員が自分の意思で新規事業を提案・実現できる機会です。 Ringフロー その後の事業開発手法 Ringを通過した案件は、事業化を検討する権利を得て、事業開発を行います。 さまざまな事業開発の手法がありますが、例えば既存領域での事業開発の場合は、 担当事業会社内で予算や
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く