日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

導致MySQL做全表掃描的幾種情況

瀏覽:52日期:2023-10-04 14:31:20

這兩天看到了兩種可能會導致全表掃描的sql,這里給大家看一下,希望可以避免踩坑:

情況1:

強制類型轉換的情況下,不會使用索引,會走全表掃描。

舉例如下:

首先我們創建一個表

CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `age` int(11) DEFAULT NULL, `score` varchar(20) NOT NULL DEFAULT ’’, PRIMARY KEY (`id`), KEY `idx_score` (`score`)) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8

我們可以看到,這個表有三個字段,其中兩個int類型,一個varchar類型。varchar類型的字段score是一個索引,而id是主鍵。

然后我們給這個表里面插入一些數據,插入數據之后的表如下:

mysql:yeyztest 21:43:12>>select * from test;+----+------+-------+| id | age | score |+----+------+-------+| 1 | 1 | 5 || 2 | 2 | 10 || 5 | 5 | 25 || 8 | 8 | 40 || 9 | 2 | 45 || 10 | 5 | 50 || 11 | 8 | 55 |+----+------+-------+7 rows in set (0.00 sec)

這個時候,我們使用explain語句來查看兩條sql的執行情況,分別是:

explain select * from test where score =’10’;explain select * from test where score =10;

結果如下:

mysql:yeyztest 21:42:29>>explain select * from test where score =’10’;+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+| 1 | SIMPLE | test | NULL | ref | idx_score | idx_score | 62 | const | 1 | 100.00 | NULL |+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+1 row in set, 1 warning (0.00 sec)mysql:yeyztest 21:43:06>>explain select * from test where score =10; +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+| 1 | SIMPLE | test | NULL | ALL | idx_score | NULL | NULL | NULL | 7 | 14.29 | Using where |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+1 row in set, 3 warnings (0.00 sec)

可以看到,如果我們使用的是varchar類型的值,那么結果中掃描的行數rows就是1,而當我們使用的是整數值10的時候,掃描行數變為了7,證明,如果出現了強制類型轉換,則會導致索引失效。

情況2:

反向查詢不能使用索引,會導致全表掃描。

創建一個表test1,它的主鍵是score,然后插入6條數據:

CREATE TABLE `test1` ( `score` varchar(20) not null default ’’ , PRIMARY KEY (`score`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mysql:yeyztest 22:09:37>>select * from test1;+-------+| score |+-------+| 111 || 222 || 333 || 444 || 555 || 666 |+-------+6 rows in set (0.00 sec)

當我們使用反向查找的時候,不會使用到索引,來看下面兩條sql:

explain select * from test1 where score=’111’;explain select * from test1 where score!=’111’;

mysql:yeyztest 22:13:01>>explain select * from test1 where score=’111’;+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+| 1 | SIMPLE | test1 | NULL | const | PRIMARY | PRIMARY | 62 | const | 1 | 100.00 | Using index |+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+1 row in set, 1 warning (0.00 sec)mysql:yeyztest 22:13:08>>explain select * from test1 where score!=’111’;+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+| 1 | SIMPLE | test1 | NULL | index | PRIMARY | PRIMARY | 62 | NULL | 6 | 100.00 | Using where; Using index |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+1 row in set, 1 warning (0.00 sec)

可以看到,使用!=作為條件的時候,掃描的行數是表的總記錄行數。因此如果想要使用索引,我們就不能使用反向匹配規則。

情況3:

某些or值條件可能導致全表掃描。

首先我們創建一個表,并插入幾條數據:

CREATE TABLE `test4` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, KEY `idx_id` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)mysql--dba_admin@127.0.0.1:yeyztest 22:23:44>>select * from test4;+------+------+| id | name |+------+------+| 1 | aaa || 2 | bbb || 3 | ccc || 4 | yeyz || NULL | yeyz |+------+------+5 rows in set (0.00 sec)

其中表test4包含兩個字段,id字段是一個索引,而name字段是varchar類型,我們來看下面三個語句的掃描行數:

explain select * from test4 where id=1;explain select * from test4 where id is null;explain select * from test4 where id=1 or id is null;

mysql:yeyztest 22:24:12>>explain select * from test4 where id is null;+----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-----------------------+| 1 | SIMPLE | test4 | NULL | ref | idx_id| idx_id | 5 | const | 1 | 100.00 | Using index condition |+----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-----------------------+1 row in set, 1 warning (0.00 sec)mysql:yeyztest 22:24:17>>explain select * from test4 where id=1; +----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------+| 1 | SIMPLE | test4 | NULL | ref | idx_id| idx_id | 5 | const | 1 | 100.00 | NULL |+----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------+1 row in set, 1 warning (0.00 sec)mysql:yeyztest 22:24:28>>explain select * from test4 where id=1 or id is null;+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+| 1 | SIMPLE | test4 | NULL | ALL | idx_id| NULL | NULL | NULL | 5 | 40.00 | Using where |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+1 row in set, 1 warning (0.00 sec)

可以看到單獨使用id=1和id is null,都只會掃描一行記錄,而使用or將二者連接起來就會導致掃描全表而不使用索引。

簡單總結一下:

1.強制類型轉換的情況下,不會使用索引,會走全表掃描

2.反向查詢不能使用索引,會導致全表掃描。

3.某些or值條件可能導致全表掃描。

以上就是導致MySQL做全表掃描的幾種情況的詳細內容,更多關于MySQL 全表掃描的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一区导航| 欧美日韩1区2区3区| 国产精品中文字幕制服诱惑| 日韩一区中文| 精品丝袜在线| 日本高清不卡一区二区三区视频| 日韩精品麻豆| 国产精品一级| 在线人成日本视频| 日韩精品亚洲专区在线观看| 国产一区二区三区黄网站| 久久久久久亚洲精品美女| 嫩草伊人久久精品少妇av杨幂| 国产精品亚洲成在人线| 国产精品极品在线观看| 国产成人精品999在线观看| 日本一二区不卡| 秋霞影视一区二区三区| 婷婷中文字幕一区| 蜜桃av一区二区三区电影| 日韩成人一级| 精品一区二区三区中文字幕| 日韩av二区| 久久精品影视| 香蕉久久夜色精品国产| 日韩有吗在线观看| 国产精品一区高清| 成人三级高清视频在线看| 国产亚洲一区二区手机在线观看 | 成人精品亚洲| 欧美日韩国产传媒| 亚洲免费专区| 另类欧美日韩国产在线| 久久久久国产精品一区二区| 99国产精品自拍| 亚洲精品国产精品粉嫩| 国产精品三级| 久久国产精品成人免费观看的软件| 欧美日韩视频| 亚洲毛片视频| 久久中文字幕导航| 九色porny丨国产首页在线| 日韩午夜精品| 国产精品久久久久久久免费软件| 中文在线а√天堂| 在线国产一区| 国产日韩欧美一区在线| 日韩精品看片| 日韩精品高清不卡| 日本综合字幕| 蜜桃91丨九色丨蝌蚪91桃色| 黄色网一区二区| 中文在线不卡| 国产精品亲子伦av一区二区三区| 天堂中文av在线资源库| 中文视频一区| а√天堂8资源中文在线| 免费中文字幕日韩欧美| 麻豆精品av| 天使萌一区二区三区免费观看| 国产日韩高清一区二区三区在线 | 136国产福利精品导航网址| 亚洲精品九九| 亚洲精品**中文毛片| 香蕉久久久久久久av网站| 久久久精品国产**网站| 亚洲综合不卡| 色爱综合网欧美| 亚洲精品乱码久久久久久蜜桃麻豆| 91视频久久| 午夜精品福利影院| 99热精品久久| 精品一区二区三区中文字幕视频 | 九九色在线视频| 久久精品xxxxx| 亚洲美洲欧洲综合国产一区 | 欧美日韩视频网站| 青青草91视频| 天堂网在线观看国产精品| 麻豆国产一区| 视频在线观看91| 在线看片福利| 国产免费播放一区二区| 日韩一区二区免费看| 国产成人精品三级高清久久91| 日韩精品久久理论片| 亚洲精品一区二区在线看| 国产高潮在线| 日韩高清二区| 日韩视频在线一区二区三区| 国产精品久久久久av电视剧| 欧美精品中文| 日本欧美在线看| 亚洲午夜一级| 日本蜜桃在线观看视频| 国产精品国码视频| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩精品午夜| 国产伦久视频在线观看| 美女高潮久久久| 国产日产精品一区二区三区四区的观看方式 | 日本а中文在线天堂| 国产精品伦一区二区| 日韩在线成人| 亚久久调教视频| 蜜臀av一区二区在线免费观看| 伊人久久大香线蕉av不卡| 国产一区调教| 免费亚洲婷婷| 免费日韩一区二区三区| 国产精品日韩精品在线播放| 日韩精彩视频在线观看| 蜜臀av在线播放一区二区三区 | 国产综合激情| 国产精品久久久久久久久久10秀| 久久av国产紧身裤| 欧美另类中文字幕| 日本少妇一区二区| 日韩高清电影一区| 日本不卡高清| 日本va欧美va瓶| 欧美日韩a区| 国产日韩欧美一区二区三区在线观看| 日韩综合一区二区三区| 亚洲毛片在线| 日韩一二三区在线观看| 中文字幕一区二区精品区| 亚洲欧美日韩国产| 久久xxxx| 美女国产精品| 亚洲一区有码| 蜜桃视频在线观看一区二区| 美日韩精品视频| 一区二区三区午夜视频| 天堂va欧美ⅴa亚洲va一国产| 日韩欧美2区| 国产精品麻豆成人av电影艾秋 | 久久av中文| 久久精品欧洲| 美女高潮久久久| 精品视频网站| 国产 日韩 欧美 综合 一区| 日韩不卡一区| 亚洲午夜精品久久久久久app| 不卡av一区二区| 亚洲欧美网站| 日韩精品导航| 久久av网站| 日韩欧美一区二区三区在线视频 | 国产毛片精品| 老牛国内精品亚洲成av人片| 日产精品一区二区| 久久精品影视| 亚洲深夜福利在线观看| 国产欧美日韩影院| av日韩中文| 激情综合亚洲| 99riav1国产精品视频| 亚洲三级在线| 欧美成人一二区| 日韩中文影院| 中文视频一区| 九九99久久精品在免费线bt| 综合日韩av| 亚洲免费网址| 国产日韩欧美一区在线| 亚洲国产福利| 丝袜美腿亚洲色图| 美女精品视频在线| 精品中文一区| 日本99精品| 麻豆网站免费在线观看| re久久精品视频| 欧美日本久久| 欧美日韩精品免费观看视欧美高清免费大片 | 婷婷综合网站| 日韩欧美中文字幕电影| 国产精品成久久久久| 欧美日韩国产一区精品一区| 日韩av中文字幕一区| 精品一区二区男人吃奶| 狠狠色狠狠色综合日日tαg| 日本麻豆一区二区三区视频| 日韩一区三区| 亚洲三级在线| 午夜精品久久久久久久久久蜜桃| 石原莉奈一区二区三区在线观看| 国产精品一级在线观看| 婷婷激情久久| 欧美一区激情| 日韩福利一区| 日韩欧美精品一区二区综合视频| 亚洲国产福利| 亚洲精品在线a| 日韩在线视频精品| 日韩中文字幕一区二区高清99| 久久青青视频| 欧美日韩精品一区二区三区视频 | 亚洲国产日韩欧美在线| 国产精品亚洲四区在线观看 |