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

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

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

瀏覽:47日期: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久久,三上悠亚国产精品一区二区三区
亚洲国产专区校园欧美| 你懂的国产精品| 日本色综合中文字幕| 日韩高清欧美激情| 国产精品中文| 日韩成人精品一区| 国产在线成人| 亚洲精品伦理| 国产精品欧美三级在线观看 | 国产精品毛片久久| 国产99亚洲| 亚洲香蕉久久| 国产另类在线| 国产一区二区三区日韩精品 | 亚洲成人不卡| 在线亚洲成人| 国产精品一区二区三区四区在线观看| 福利片在线一区二区| 黄色亚洲免费| 国产精品草草| 精品一区三区| 国产伦精品一区二区三区视频 | 久久av中文| 99精品视频在线| 日韩国产在线观看一区| 精品高清久久| 免费一级片91| 91麻豆国产自产在线观看亚洲| 欧美日韩国产免费观看| 国产日本久久| 女同性一区二区三区人了人一| 欧美亚洲自偷自偷| 激情综合自拍| 国产精品亚洲成在人线| 成人羞羞在线观看网站| 久久午夜精品一区二区| 成人在线视频中文字幕| 中文视频一区| 国产v综合v| 7777精品| 亚洲作爱视频| 92国产精品| 日韩精品高清不卡| 美女久久久久| 麻豆一区二区三| 久久成人精品| 精品美女在线视频| 亚洲免费观看高清完整版在线观| 成人台湾亚洲精品一区二区| 午夜亚洲精品| 日韩福利一区| 无码日韩精品一区二区免费| 成人精品高清在线视频| 亚洲综合小说| 亚洲黄色免费av| 日韩av午夜在线观看| www.com.cn成人| 日韩va亚洲va欧美va久久| 999久久久精品国产| 国产福利一区二区精品秒拍| 免费视频最近日韩| 成人日韩在线| 久久久久伊人| 日韩激情精品| 午夜日韩福利| 91青青国产在线观看精品| 国产精品中文| 少妇精品久久久一区二区| 91久久中文| 亚洲成人二区| 激情国产在线| 日韩av在线中文字幕| 国产精品扒开腿做爽爽爽软件| 视频一区国产视频| 999久久久免费精品国产| 国产成人精品一区二区免费看京 | 日韩美女一区二区三区在线观看| 国产亚洲久久| 日韩精品a在线观看91| 亚洲一区二区三区四区五区午夜 | 欧美亚洲tv| 亚洲免费毛片| 综合激情五月婷婷| 性欧美精品高清| 久久久天天操| 亚洲天堂一区二区| 成人黄色av| 国产网站在线| 日韩电影免费网址| 日韩大片在线| 视频小说一区二区| 色偷偷偷在线视频播放| 激情国产在线| 五月激情久久| 在线成人动漫av| 亚洲国产成人精品女人| 日韩视频二区| 蜜桃91丨九色丨蝌蚪91桃色| 99精品电影| 日韩电影免费网址| 香蕉成人av| 欧美69视频| 在线综合欧美| 亚洲+小说+欧美+激情+另类| 日韩精选在线| 国产欧美91| 国产一区二区三区四区大秀| 天堂√中文最新版在线| 日韩高清中文字幕一区二区| 99精品国产一区二区三区| 99精品美女| 亚洲神马久久| 日产欧产美韩系列久久99| 91p九色成人| 欧美自拍一区| 开心激情综合| 黑人精品一区| jiujiure精品视频播放| 免费成人性网站| 欧美日韩调教| 国产91在线播放精品| 在线一区视频观看| 最新日韩av| 91精品视频一区二区| 狠狠久久伊人| 免费毛片在线不卡| 日韩一区二区三区精品| 美女视频免费精品| 97在线精品| 欧美性感美女一区二区| 国产精品毛片在线| 欧美天堂在线| 中文字幕在线视频久| 伊人影院久久| 国产精品porn| 美女久久久久| 久久国产生活片100| 91精品xxx在线观看| 首页国产欧美久久| 久久免费视频66| 欧美日韩国产一区精品一区| 国产欧美日韩精品一区二区三区| 激情视频网站在线播放色| 亚洲在线国产日韩欧美| 欧美亚洲网站| 精品亚洲美女网站| 日本一区中文字幕| 人人精品亚洲| 国产欧美激情| 亚洲神马久久| 三上亚洲一区二区| 综合亚洲视频| 色老板在线视频一区二区| 日韩精品视频中文字幕| 久久久久国产| 麻豆国产精品| 亚洲美女91| 久久精品91| 精品三级av| 久久不射中文字幕| 日韩免费看片| 国产精品qvod| 色综合视频一区二区三区日韩 | 国产精品二区不卡| 欧美日韩va| 亚洲综合精品| 日韩久久精品| 国产精品入口久久| 玖玖玖国产精品| 日本精品不卡| 欧美国产另类| 视频一区日韩| 麻豆亚洲精品| 中文字幕系列一区| 精品三区视频| 国产精品mm| 欧美欧美黄在线二区| 中文无码久久精品| 亚洲少妇自拍| 午夜久久久久| 999国产精品视频| 国产精品毛片久久| 精品久久久久久久| 免费在线观看一区| 日韩国产欧美一区二区三区| 国产欧美日韩精品一区二区三区| 日欧美一区二区| 视频一区二区欧美| 欧美精选视频一区二区| 国产一区一一区高清不卡| 国产精品一区二区三区av麻| 日韩精品成人| 日韩av成人高清| 日韩精品导航| 日韩不卡免费视频| 日韩 欧美一区二区三区| 最近国产精品视频| 亚洲开心激情| 五月国产精品| 久久国产精品免费一区二区三区 |