(インタビューの質問) MySQL の遅いクエリを解決する方法

クエリが遅い原因と解決策

  1. 冗長データをスキャンし、使用を避けるselect * from xxx
  2. クロス多表扫描データを减少join適切に非正規化して、冗長データを増やし、スペースと時間を交換することができます。
  3. 索引没有建立、インデックスが適切に最適化されていないか、最適なインデックスに適用されていません (結合インデックスは左端の一致を使用します)。
CREATE TABLE `test_table`
`id` bigint(20) UNSINGED NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`age` int(16) DEFAULT NULL,
KEY `idx_age`(`age`)
)ENGINE = InnoDB CHARSET = utf8mb4;
  1. 作成されたインデックスが不適切です:
  • インデックスのデータ型はシンプルかつ適切で、占有スペースが少なく、NULL 値 (NOT NULL) をできるだけ避けることで、パフォーマンスが向上します。
  • 数値型を比較す​​る必要があるのは 1 回のみで、文字列は逐語的に比較されます。インデックスの数が 6 を超えないようにしてください。パフォーマンスの低下につながります。
  • 性別など、繰り返しデータが多く含まれるフィールドはインデックス作成には適していません。ランダムな文字列はクラスター化インデックス (データ移動) の構築には適していません。
  • ユニオンインデックスは左端の一致を使用します
  • インデックスの失敗: or の使用を避けてください (代わりに Union all を使用してください)、in または not in (代わりに存在しますを使用してください)、null 変数であるか、一致するクエリまたは演算子であるか、または where 句内のフィールドに対して式および関数の操作を実行してください。そうでない場合は、次のエラーが発生%abc%!=ます<>。エンジンはインデックスの使用を放棄し、テーブル全体のスキャンを実行します。
  1. キャッシュ:
  • キャッシュの無効化: SQL の大文字と小文字の区別、query_cache_sizeサイズ超過、メモリ不足、キャッシュ タイムアウト、データ変更
-- 不会使用同一缓存
select name from users where id = 1;
SELECT name FROM users WHERE id = 1;

参考文献

  1. MySQLの遅いクエリの問題を解決する

おすすめ

転載: blog.csdn.net/e2788666/article/details/131447419