ホームページ  >  記事  >  データベース  >  mysql でインデックスを使用しないクエリ状況はどれですか?

mysql でインデックスを使用しないクエリ状況はどれですか?

WBOY
WBOY転載
2023-05-29 21:19:042997ブラウズ

mysql インデックスを使用しないクエリ状況

1. インデックス列は計算に参加し、インデックスを使用しません

SELECT `username` FROM `t_user` WHERE age=20;-- 会使用索引
SELECT `username` FROM `t_user` WHERE age+10=30;-- 不会使用索引!!因为所有索引列参与了计算
SELECT `username` FROM `t_user` WHERE age=30-10;-- 会使用索引

2. インデックス列は関数を使用し、インデックス

-- 不会使用索引,因为使用了函数运算,原理与上面相同
SELECT username FROM t_user WHERE concat(username,'1') = 'admin1'; 
-- 会使用索引
SELECT username FROM t_user WHERE username = concat('admin','1');
## は使用できません #3. インデックス列には like ステートメントを使用し、インデックス

SELECT * FROM USER WHERE username LIKE 'mysql测试%'   --走索引
SELECT * FROM USER WHERE username LIKE '%mysql测试'   --不走索引
SELECT * FROM USER WHERE username LIKE '%mysql测试%'  --不走索引

4 は使用できません。 データ型の暗黙的な変換、文字列列と文字列列間の直接比較インデックス

-- stock_code字符串类型带索引
SELECT * FROM `stock_data` WHERE stock_code = '600538'  --走索引
SELECT * FROM `stock_data` WHERE stock_code = 600538  --不走索引

5 を使用せずに数値を取得します。1 つのフィールドにインデックスがない限り、ステートメントを変更するときにインデックスが使用されず、インデックスも使用されないため、OR 演算は避けてください。 !

-- stock_code带索引,open不带索引
SELECT * FROM `stock_data` WHERE `stock_code` = '600538' OR `open` = 6.62  -- 不走索引
-- stock_code带索引,up_down_pre带索引
SELECT * FROM `stock_data` WHERE `stock_code` = '600538' OR `up_down_pre` = 5.1  -- 走索引

6. where id !=2 または where id fec9a23e2b3a432e889202c6c8fe06a2、インデックスなしでは使用できません (補助インデックス)

変更方法:

上記の方法を使用しないでください。 query を使用するか、フィルター条件としてインデックス列を選択します。

Individual >,<,in は行く場合と行かない場合があります。結果セットによって異なります。ビジネスに応じて、limit

or or in を追加してみてください。次のように変更してみてください。 Union

7.like "%" パーセント記号は先頭に配置されません

EXPLAIN SELECT * FROM teltab WHERE telnum LIKE ‘31%&#39; 走索引
EXPLAIN SELECT * FROM teltab WHERE telnum LIKE ‘%110&#39; 不走索引
変更方法:

%linux の検索要件について% クラスでは、elasticsearch を使用できます。 mongodb は、検索サービスに特化したデータベース製品です。

以上がmysql でインデックスを使用しないクエリ状況はどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。