亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 導(dǎo)致MySQL做全表掃描的幾種情況

導(dǎo)致MySQL做全表掃描的幾種情況

熱門標(biāo)簽:啥是企業(yè)400電話辦理 外呼系統(tǒng)打電話上限是多少 武漢網(wǎng)絡(luò)外呼系統(tǒng)服務(wù)商 怎樣在地圖標(biāo)注銷售區(qū)域 電話外呼系統(tǒng)改號 百應(yīng)電話機(jī)器人優(yōu)勢 曲靖移動(dòng)外呼系統(tǒng)公司 南昌三維地圖標(biāo)注 地圖標(biāo)注費(fèi)用是多少

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

情況1:

強(qiáng)制類型轉(zhuǎn)換的情況下,不會(huì)使用索引,會(huì)走全表掃描。

舉例如下:

首先我們創(chuàng)建一個(gè)表

 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

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

然后我們給這個(gè)表里面插入一些數(shù)據(jù),插入數(shù)據(jù)之后的表如下:

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)

這個(gè)時(shí)候,我們使用explain語句來查看兩條sql的執(zhí)行情況,分別是:

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

explain select * from test where score =10;

結(jié)果如下:

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類型的值,那么結(jié)果中掃描的行數(shù)rows就是1,而當(dāng)我們使用的是整數(shù)值10的時(shí)候,掃描行數(shù)變?yōu)榱?,證明,如果出現(xiàn)了強(qiáng)制類型轉(zhuǎn)換,則會(huì)導(dǎo)致索引失效。

情況2:

   反向查詢不能使用索引,會(huì)導(dǎo)致全表掃描。

創(chuàng)建一個(gè)表test1,它的主鍵是score,然后插入6條數(shù)據(jù):

CREATE TABLE `test1` (
  `score` varchar(20) not null default '' ,
  PRIMARY KEY (`score`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

mysql:yeyztest 22:09:37>>select * from test1;
+-------+
| score |
+-------+
| 111   |
| 222   |
| 333   |
| 444   |
| 555   |
| 666   |
+-------+
6 rows in set (0.00 sec)

    當(dāng)我們使用反向查找的時(shí)候,不會(huì)使用到索引,來看下面兩條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)

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

情況3:

  某些or值條件可能導(dǎo)致全表掃描。

首先我們創(chuàng)建一個(gè)表,并插入幾條數(shù)據(jù):

CREATE TABLE `test4` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  KEY `idx_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 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包含兩個(gè)字段,id字段是一個(gè)索引,而name字段是varchar類型,我們來看下面三個(gè)語句的掃描行數(shù):

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)

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

簡單總結(jié)一下:

1.強(qiáng)制類型轉(zhuǎn)換的情況下,不會(huì)使用索引,會(huì)走全表掃描

2.反向查詢不能使用索引,會(huì)導(dǎo)致全表掃描。

3.某些or值條件可能導(dǎo)致全表掃描。

以上就是導(dǎo)致MySQL做全表掃描的幾種情況的詳細(xì)內(nèi)容,更多關(guān)于MySQL 全表掃描的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 大幅提升MySQL中InnoDB的全表掃描速度的方法
  • MySQL查詢優(yōu)化:LIMIT 1避免全表掃描提高查詢效率
  • Mysql如何避免全表掃描的方法

標(biāo)簽:荊州 滄州 隨州 甘南 資陽 錦州 黑河 吉林

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《導(dǎo)致MySQL做全表掃描的幾種情況》,本文關(guān)鍵詞  導(dǎo)致,MySQL,做全,表,掃描,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《導(dǎo)致MySQL做全表掃描的幾種情況》相關(guān)的同類信息!
  • 本頁收集關(guān)于導(dǎo)致MySQL做全表掃描的幾種情況的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    久草免费在线观看| 国产网站免费观看| 91麻豆国产| 毛片的网站| 国产伦精品一区二区三区在线观看 | 久久福利影视| 韩国毛片免费| 久久久久久久网| 精品国产香蕉伊思人在线又爽又黄| 国产成人欧美一区二区三区的| 欧美激情在线精品video| 欧美激情一区二区三区视频| 九九久久99综合一区二区| 欧美大片毛片aaa免费看| 日本特黄特黄aaaaa大片| 精品国产香蕉在线播出| 国产不卡精品一区二区三区| 午夜欧美成人久久久久久| 999精品视频在线| 国产精品自拍在线| 日本特黄特色aaa大片免费| 精品视频免费看| 一级女性全黄生活片免费| 成人高清免费| 欧美一区二区三区在线观看| 可以在线看黄的网站| 天天做日日干| 日韩在线观看免费| 欧美激情一区二区三区在线播放 | 国产一区二区精品久久91| 欧美电影免费看大全| 久久福利影视| 国产伦精品一区二区三区无广告| 韩国毛片| 91麻豆精品国产自产在线| 国产网站在线| 成人av在线播放| 九九干| 九九精品久久久久久久久| 久草免费在线观看| 日韩在线观看免费| 国产成人啪精品视频免费软件| 一 级 黄 中国色 片| 国产91丝袜在线播放0| 欧美大片aaaa一级毛片| 欧美另类videosbestsex久久 | 亚洲 男人 天堂| 欧美一区二区三区性| 日本免费区| 成人免费观看视频| 精品久久久久久中文字幕2017| 日本伦理黄色大片在线观看网站| 国产福利免费观看| 国产成人啪精品视频免费软件| 免费国产一级特黄aa大片在线| 日韩免费片| 99色视频在线观看| a级毛片免费观看网站| 国产伦精品一区二区三区无广告| 国产成人欧美一区二区三区的| 久久成人综合网| 一级毛片视频免费| 日韩专区第一页| 欧美电影免费| 九九干| 午夜精品国产自在现线拍| 美女免费毛片| 精品视频一区二区| 久久久久久久免费视频| 国产麻豆精品免费视频| 精品视频免费观看| 国产美女在线一区二区三区| 精品国产一区二区三区久久久狼| 91麻豆国产福利精品| 精品视频免费看| 国产伦精品一区二区三区在线观看 | 可以免费看污视频的网站| 四虎久久精品国产| 欧美大片a一级毛片视频| 亚洲 国产精品 日韩| 麻豆午夜视频| 日日爽天天| 国产精品123| 欧美另类videosbestsex视频| 999精品视频在线| a级毛片免费观看网站| 91麻豆精品国产片在线观看| 国产不卡在线观看| 成人免费网站久久久| 免费一级片在线| 精品在线观看一区| 日韩中文字幕一区| 国产国语在线播放视频| 国产91精品露脸国语对白| 成人a大片在线观看| 国产成人精品综合久久久| 国产网站免费| 久久国产一区二区| 午夜精品国产自在现线拍| 99久久精品国产麻豆| 亚洲精品影院一区二区| a级精品九九九大片免费看| 国产伦精品一区二区三区在线观看 | 天天做日日干| 日韩在线观看视频免费| 欧美激情一区二区三区视频| 成人在激情在线视频| 亚洲www美色| 中文字幕一区二区三区 精品| 亚欧成人乱码一区二区| 国产麻豆精品高清在线播放| 国产一区二区精品久久| 亚洲精品影院| 99热精品一区| 国产不卡在线看| 一级女性全黄久久生活片| 日韩中文字幕一区| 久久国产精品自线拍免费| 天堂网中文在线| 精品视频免费观看| 精品在线观看国产| 九九九国产| 日韩免费片| 国产一区二区精品久久91| 国产一区二区精品尤物| 国产高清在线精品一区二区| 九九久久国产精品| 欧美另类videosbestsex视频| 国产91丝袜高跟系列| 欧美激情伊人| 日韩一级黄色片| 成人在激情在线视频| 国产伦理精品| 精品国产一区二区三区免费 | 国产高清在线精品一区二区| 久久国产影院| 欧美一级视| 国产成人啪精品| 国产亚洲免费观看| 九九久久国产精品| 精品视频在线观看视频免费视频| 久久国产影视免费精品| 国产麻豆精品免费视频| 精品国产一区二区三区久| 91麻豆精品国产自产在线观看一区| 可以免费看毛片的网站| 亚洲第一页色| 欧美爱色| 日本特黄一级| 日本特黄一级| 国产精品1024永久免费视频| 可以免费看毛片的网站| 99久久视频| 99色视频| 青青青草视频在线观看| 久久99中文字幕久久| 国产麻豆精品| 黄视频网站在线免费观看| 成人免费网站久久久| 精品国产亚洲一区二区三区| 国产一区精品| 国产不卡福利| a级精品九九九大片免费看| 999精品在线| 欧美α片无限看在线观看免费| 999精品在线| 精品国产一区二区三区精东影业| 精品在线观看国产| 日韩在线观看免费| 欧美大片a一级毛片视频| 91麻豆精品国产自产在线| 中文字幕一区二区三区 精品| 日韩av成人| 国产网站免费视频| 成人高清视频免费观看| 日本免费乱理伦片在线观看2018| 青青久久国产成人免费网站| 欧美1区| 在线观看成人网| 九九久久99综合一区二区| 九九久久99| 亚洲精品影院一区二区| 99热精品在线| 精品久久久久久综合网| 九九精品在线| 韩国毛片免费大片| 日本免费区| 亚洲精品影院| 日韩专区一区| 精品视频在线观看一区二区三区| 国产原创中文字幕| 99色播| 欧美a级v片不卡在线观看| 国产一区二区精品久久91| 国产国语在线播放视频| 欧美激情一区二区三区在线播放| 精品国产一区二区三区久| 午夜激情视频在线播放| 国产高清视频免费观看| 日本伦理片网站|