ホームページ  >  記事  >  データベース  >  MySQL インデックス障害の原因となる状況

MySQL インデックス障害の原因となる状況

WBOY
WBOYオリジナル
2024-02-18 18:02:05932ブラウズ

MySQL インデックス障害の原因となる状況

MySQL インデックス障害のいくつかの状況とコード例

はじめに:
MySQL データベースでは、インデックスはクエリのパフォーマンスを向上させる重要な要素の 1 つです。ただし、インデックスが期待した役割を果たさず、クエリのパフォーマンスが改善されず、さらにはクエリの速度が遅くなる場合もあります。原因は、インデックスが無効である可能性があります。この記事では、MySQL インデックスの失敗を引き起こすいくつかの一般的な状況を紹介し、対応するコード例を示します。

1. 関数または式を使用してインデックス列に対して操作を実行する
クエリ ステートメント内のインデックス列に対して関数呼び出しまたは式操作を実行すると、インデックスが無効になり、MySQL は使用できなくなります。高速処理のためのインデックスです。お問い合わせください。以下に例を示します。

-- 创建表
CREATE TABLE `user_address` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 查询示例,索引失效
SELECT * FROM `user_address` WHERE YEAR(`address`) = 2022;

上記のコードでは、address カラムに YEAR 関数を使用しているため、MySQL はインデックス ## を使用できません。 #idx_user_id、インデックスが失敗し、クエリ効率が低下します。

2. インデックス列で関数を使用する

インデックス列で関数を使用すると、次の例のようにインデックスのエラーも発生します:

-- 查询示例,索引失效
SELECT * FROM `user_address` WHERE LEFT(`address`, 5) = 'China';

上記のコードでは、## が原因で、 #address

列では LEFT 関数が使用されており、これにより MySQL がインデックス idx_user_id を使用できなくなり、インデックスが失敗します。 3. ファジー クエリに LIKE 演算子を使用する

ファジー クエリに LIKE 演算子を使用する場合、ワイルドカード文字 % で始まらない場合、インデックスは無効になります。例は次のとおりです。

-- 查询示例,索引失效
SELECT * FROM `user_address` WHERE `address` LIKE 'Shanghai%';

上記のコードでは、LIKE 演算子が % ワイルドカード文字で始まっていないため、MySQL はインデックス

idx_user_id

を使用できず、クエリのパフォーマンスが低下します。 4. クエリ条件で OR キーワードを使用する

クエリ条件で OR キーワードを使用する 各 OR 句の列にインデックスがない場合、インデックスは失敗します。例は次のとおりです。

-- 查询示例,索引失效
SELECT * FROM `user_address` WHERE `user_id` = 1 OR `address` = 'Shanghai';

上記のコードでは、2 つの列

user_id

address にそれぞれ独自のインデックスがありますが、2 つの条件は次のように接続されています。 OR キーワードがそれぞれ異なるインデックスが使用されているため、インデックスが無効になります。 概要:

MySQL データベースを使用する場合、インデックスの失敗につながる上記のシナリオを回避する必要があります。 SQL ステートメントを作成するときは、インデックス列に対して関数や式の操作を実行することを避け、適切な演算子と接続を使用してクエリ条件を構築し、インデックスがクエリ操作で効果的に使用され、クエリのパフォーマンスが向上するようにする必要があります。


参考資料:

MySQL 公式ドキュメント (https://dev.mysql.com/doc/)


(注: 上記の例のテーブル構造とクエリ ステートメントは、デモ、実際の状況はデータベースのバージョン、インデックス設定などの要因により異なる場合があります)

以上がMySQL インデックス障害の原因となる状況の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。