関数呼び出しの最適化MySQL 関数は、内部的に決定論的または非決定論的としてマークされます。引数に固定値を与えられた関数が、呼び出しごとに異なる結果を返す場合、その関数は未定義です。非決定論的関数の例: 関数が非決定的としてマークされている場合、 MySQL は、引数の型 (引数がテーブル列であるか定数値であるか) に基づいて、関数を評価するタイミングも決定します。テーブル列の値が変更されるたびに、テーブル列を引数として受け取る決定論的関数を評価する必要があります。 非決定論的関数はクエリのパフォーマンスに影響を与える可能性があります。たとえば、一部の最適化が利用できない場合や、より多くのロックが必要になる場合があります。以下の説明では テーブル t の定義が次のようになっているとします。 テーブル t を作成します (id INT NOT NULL PRIMARY KEY、col_a VARCHAR(100))。 次の 2 つのクエリを考えてみましょう。 tから*を選択します。WHERE id = POW(1,2); SELECT * FROM t WHERE id = FLOOR(1 + RAND() * 49); 両方のクエリは、主キーとの等価比較により主キー検索を使用しているように見えますが、これは最初のクエリにのみ適用されます。
非決定性の影響は t を更新します。set col_a = some_expr WHERE id = FLOOR(1 + RAND() * 49); おそらく、主キーが式と一致する行を最大 1 つ更新することが意図されています。ただし、 今説明した動作は、パフォーマンスとレプリケーションに影響を及ぼします。
困難さは、
@keyval = FLOOR(1 + RAND() * 49) を設定します。 UPDATE t SET col_a = some_expr WHERE id = @keyval;
optimizer_switch = 'derived_merge=off' を設定します。 t を更新します (SELECT @keyval := FLOOR(1 + RAND() * 49)) AS dt col_a = some_expr を設定します。WHERE id = @keyval; 前述したように、 SELECT * FROM t WHERE partial_key=5 AND some_column=RAND(); オプティマイザーが 上記はMySQL関数呼び出しの最適化の詳細な説明です。MySQL関数呼び出しの最適化の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: WeChatミニプログラムのすべてのページがログインされていることを確認する方法
リンク上の点線のボックスを削除しますコードをコピーコードは次のとおりです。 a:アクティブ、a:フォ...
目次1. 概要2. nginx.conf 1) 設定ファイルの場所2) ワーカープロセス3) イベン...
みなさんこんにちは。今日はv-modelを使って親子コンポーネントのバインディング効果を実現する方法...
注: sg11 弊社では Linux システム仮想ホストのセルフインストールのみサポートしております...
iPadなどのモバイル端末の普及により、人々がモバイル端末で読書に費やす時間はますます長くなり、読...
目次1. Linuxシステムの操作レベルの概要2. 実行レベルを確認する3. 現在のシステムの動作レ...
最近、ポーターを学んでいます。こんなに強力なものがあったなんて、今まで知らなかった気がします。クラス...
1. 最新のnginx dockerイメージをダウンロードする $ docker pull ngin...
目次1. パノラマII. 背景1. 反応: プロフェッショナル2. ビュー: 凡例3. 技術的な思考...
この記事では、CentOS 7.4 サーバーに Apache をインストールする方法と、インストール...
スワップの紹介Linux のスワップ (スワップ パーティション) は、Windows の仮想メモリ...
目次インデックスの適切な使用1. 通常のインデックスのデメリット2. 主キーインデックスの落とし穴3...
MySQL 5.7.21 winx64無料インストールバージョンの設定方法、参考までに、具体的な内容...
1. 現象早朝、オンライン テーブルにインデックスが追加されました。テーブル内のデータ量が大きすぎた...
目次親コンポーネントと子コンポーネント間でパラメータを渡すルーティングパラメータステータスの改善コン...