最近、mySQL5.6 から percona サーバー 5.7 へのアップグレードと tokuDB テーブルの使用のテストを開始しました。データベースは、パラメータ化されたクエリに PDO ライブラリを使用する PHP 5.5 アプリケーションを提供しています。
同一のデータを持つ percona を tokudb テーブルにロードし、パフォーマンスを既存のプロダクションと比較すると、すぐにパフォーマンスが大幅に低下していることに気付きました (10 倍遅くなりました)。以下のクエリでは、テーブルに 1,200 万行あると仮定しています
5.7 データベースでこの問題を絞り込むことができたのは、次のようなクエリを実行するときの事実です。
SELECT * FROM TABLE WHERE id='12345'; -- exec time 10.5sec
vs.
SELECT * FROM TABLE WHERE id=12345; -- exec time 1.3sec
ここで、id は列タイプの整数です。それは私の印象であり、私の調査では、比較される列が数値型の場合、mySQL は '12345' を 12345 に暗黙的に変換する必要があることが確認されているようですが、これは mySQL5.7/Percona では発生していないようです。それはmySQL5.6xで起こっていました
ここでの問題は、この動作では、変数ごとにPDOStatement::bindParam (参照http://php.net/manual/en/pdostatement.bindparam.php ) を使用して型を明示的に設定する必要があることです! これを行うと、明示的な型設定をサポートしていない PDOStatement:execute() に現在パラメーターの配列を渡しているすべての準備済みステートメントがほぼグローバルに書き換えられます。
だから-私の質問はこれです-mySQLで何かが変更されたので、暗黙の変換は5.7で行われませんか、それともPerconaですか、それともtokuDBテーブルですか? これをオンに戻すために設定できる構成パラメーターはありますか?