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

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

mysql - sql 優化問題,between比in好?

瀏覽:248日期:2022-06-12 14:22:11

問題描述

看到網上的資料說:

in 和 not in 也要慎用,否則會導致全表掃描,如:select id from t where num in(1,2,3)對于連續的數值,能用 between 就不要用 in 了:select id from t where num between 1 and 3

問題解答

回答1:

連續數值當然between好了 減少解析 并且in的范圍默認超過一定數目就會走全表 9個還是多少忘了

針對樓下評論再補充一下答案:in走全表是分情況的,上面的解答只是憑記憶大概說了一下,樓下小伙伴比較認真,這里就再解釋一下,這個不是個數而應該是個比例,大概25%-35%左右,你要再問到底多少不好意思水平有限不讀源碼沒辦法確認。然后這個30左右的比例也并不是說一定走全表掃描,因為mysql還有一個索引掃描,就是說如果select的內容在你的索引里面就能找到的話當然不會去掃全表了,比如下面的例子中select id from ttt where id in (..);和select * from ttt where id in (...);前面這個肯定是走主鍵掃描,即使你in了所有id值他也是走主鍵,而后面的情況就是這種百分比的情況了,具體看下面示例,歡迎指正^_^額,然后還想說一下between的情況,為什么好是因為除了索引段上連續存取減少解析以外,還有一個情況就是在磁盤尋址檢索數據的時候,會默認讀取第一次取值附近的部分數據(有這么一個概率算法說的是當一個數據被檢索到的時候,他附近的數據也很大概率會被用到)所以就有了這么一個一次性取出冗余數據避免多次尋址的情況,這時候使用between的連續取值就正適用了

mysql> select * from ttt;+----+-------------------+| id | name |+----+-------------------+| 1 | I17021234001 || 2 | IC17031234002 || 3 | C17041234003 || 4 | IAsEw1234001 || 5 | I17021234001A2 || 6 | IC17031234002A2 || 7 | C17041234003A2 || 8 | IAsEw1234001A2 || 9 | I17021234001A2 || 10 | IC17031234002A2 || 11 | C17041234003A2 || 12 | IAsEw1234001A2 || 13 | I17021234001A2A2 || 14 | IC17031234002A2A2 || 15 | C17041234003A2A2 || 16 | IAsEw1234001A2A2 || 17 | I17021234001A2 || 18 | IC17031234002A2 || 19 | C17041234003A2 || 20 | IAsEw1234001A2 |+----+-------------------+20 rows in set (0.00 sec)mysql> show create table ttt;+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| ttt | CREATE TABLE `ttt` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(32) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 |+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)mysql> explain select * from ttt where id in (1,2,3,4,5,6);+----+-------------+-------+------+---------------+------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+------+---------------+------+---------+------+------+-------------+| 1 | SIMPLE | ttt | ALL | PRIMARY | NULL | NULL | NULL | 20 | Using where |+----+-------------+-------+------+---------------+------+---------+------+------+-------------+1 row in set (0.00 sec)mysql> explain select * from ttt where id in (1,2,3,4,5);+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+| 1 | SIMPLE | ttt | range | PRIMARY | PRIMARY | 4 | NULL | 5 | Using where |+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+1 row in set (0.00 sec)mysql> explain select * from ttt where id in (1,2,3);+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+| 1 | SIMPLE | ttt | range | PRIMARY | PRIMARY | 4 | NULL | 3 | Using where |+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+1 row in set (0.00 sec)mysql> explain select * from ttt where id in (1,2,3,4,5,6,7);+----+-------------+-------+------+---------------+------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+------+---------------+------+---------+------+------+-------------+| 1 | SIMPLE | ttt | ALL | PRIMARY | NULL | NULL | NULL | 20 | Using where |+----+-------------+-------+------+---------------+------+---------+------+------+-------------+1 row in set (0.00 sec)mysql> explain select id from ttt where id in (1,2,3,4,5,6,7);+----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+| 1 | SIMPLE | ttt | index | PRIMARY | PRIMARY | 4 | NULL | 20 | Using where; Using index |+----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+1 row in set (0.00 sec)mysql> explain select name from ttt where id in (1,2,3,4,5,6,7);+----+-------------+-------+------+---------------+------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+------+---------------+------+---------+------+------+-------------+| 1 | SIMPLE | ttt | ALL | PRIMARY | NULL | NULL | NULL | 20 | Using where |+----+-------------+-------+------+---------------+------+---------+------+------+-------------+1 row in set (0.00 sec)回答2:

根據數據庫中B樹索引的存儲結構,在葉節點存儲指向數據的物理地址,而這個物理地址當存在聚簇索引時是有序的。

如果是連續數值,between在找到第一個匹配值后,則直接從該地址往后搜索,直到最后一個元素為止。這樣就不會對后續值進行索引掃描,因此速度快了。對于in操作,不大清楚,但是估計應該會對全索引進行掃描吧。回答3:

EXPLAIN mysql 語句 看下輸出

回答4:

使用between時只需要匹配上下界,故而會快一點;in每個都要看一遍,會造成全表掃描。

日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美国产美女| 男人的天堂久久精品| 日韩精品中文字幕第1页| 国产伦精品一区二区三区千人斩| 中文不卡在线| 99在线|亚洲一区二区| 青青草精品视频| 亚洲最新av| 亚洲精品九九| 日韩av电影一区| 国产精品男女| 亚洲一本视频| 激情六月综合| 91超碰国产精品| 视频在线在亚洲| 免费看av不卡| 亚洲专区视频| 综合在线一区| 久久国际精品| 免费观看不卡av| 久久精品一区| 国产一区二区三区精品在线观看 | 国产乱码精品一区二区亚洲| 日韩高清电影一区| 欧美日一区二区在线观看| 福利一区在线| 福利在线免费视频| 精品少妇av| 国产一区二区三区91| 欧美激情三区| 黄色网一区二区| 久久久91麻豆精品国产一区| 久久国产欧美日韩精品| 亚洲啊v在线| 亚洲资源网站| 亚洲欧美久久| 亚洲精品伊人| 日韩亚洲精品在线观看| 日韩精品久久久久久| 日韩av午夜在线观看| 国产免费成人| 四虎4545www国产精品| 蜜臀av免费一区二区三区| 福利一区和二区| 青青国产91久久久久久| 精品三级av在线导航| 私拍精品福利视频在线一区| 欧洲激情综合| 色天使综合视频| 欧美a级片一区| 久久不射中文字幕| 日本精品另类| 午夜一区在线| 亚洲一区二区免费看| 日韩国产91| 国产一区二区久久久久| 免费不卡中文字幕在线| 久久久久久婷| 另类中文字幕国产精品| 久久久国产精品一区二区中文| 九九九精品视频| 婷婷亚洲综合| 综合欧美亚洲| 欧美日本久久| 久久xxxx| 视频一区二区国产| 久久中文字幕导航| 精品一区免费| 日韩激情一区二区| 亚洲黄色中文字幕| 在线精品福利| 精品视频久久| 六月婷婷一区| 国产一区二区三区亚洲| 久久精品电影| 国产精品国码视频| 日韩中文视频| 色8久久久久| 97精品国产| 亚洲一区欧美| 国产91在线播放精品| 国产精品嫩模av在线| 麻豆久久精品| 国产欧美大片| 免费福利视频一区二区三区| 男人的天堂久久精品| 精品视频在线一区二区在线| 亚洲高清成人| 国产精品久久亚洲不卡| 婷婷亚洲五月| 亚洲一级影院| 91精品一区| 在线视频观看日韩| 国产精品jk白丝蜜臀av小说| 欧美在线网站| 精品视频黄色| 日韩中文字幕| 综合国产精品| 亚洲美女91| 日本免费久久| 国产探花一区二区| 夜久久久久久| 在线人成日本视频| 午夜视频一区二区在线观看| 毛片在线网站| 日韩av一区二区三区| 尤物精品在线| 国产精品久久久亚洲一区| 在线一区欧美| 成人日韩精品| 精品久久福利| 国产亚洲精品自拍| 欧美久久天堂| 国产美女久久| 三级小说欧洲区亚洲区| 麻豆国产一区| 国产精品videossex| 久久精品 人人爱| 欧美一区自拍| 亚洲特色特黄| 免费高潮视频95在线观看网站| 久久精品青草| 狂野欧美性猛交xxxx| 日韩av成人高清| 天堂成人国产精品一区| 日韩精品中文字幕吗一区二区 | 成人欧美一区二区三区的电影| 欧洲一区二区三区精品| 国产亚洲观看| 日韩中文字幕| 中文一区一区三区免费在线观 | 蜜芽一区二区三区| 999国产精品视频| 国产传媒av在线| 久久精品免费看| 亚洲va久久久噜噜噜久久| 国产亚洲一级| 国产日韩综合| 国产视频一区三区| 国产欧美一区二区三区国产幕精品| 国产精品免费大片| 亚洲精品美女91| 蜜臀91精品一区二区三区| 99综合视频| 尹人成人综合网| 亚洲一区二区三区高清不卡| 日韩中文字幕| 中文在线中文资源| 丰满少妇一区| 久久精品女人| 精品一区二区三区免费看| 国产精品18| 欧美黄页在线免费观看| 国产精品亚洲一区二区三区在线观看| 欧美激情日韩| 欧美精品97| 水野朝阳av一区二区三区| 久久av在线| 日日夜夜免费精品视频| 日韩久久一区| 精品视频网站| 久久中文精品| 麻豆国产91在线播放| 久久久久91| 国产suv精品一区二区四区视频 | 国产欧美日韩免费观看| 日韩高清在线不卡| 久久精品999| 国产探花一区| 麻豆国产一区| 久久影院午夜精品| 日韩精品一区二区三区免费观影| 日韩欧美久久| 亚洲一区二区三区四区电影| 亚洲一区欧美| 日韩欧美高清一区二区三区| 久久精品影视| 国产二区精品| 综合国产视频| 欧美私人啪啪vps| 麻豆中文一区二区| 亚洲欧美久久| 丝袜国产日韩另类美女| 国产激情一区| 日韩精品免费一区二区三区| 国产精品美女| 久久91导航| 日韩视频一区二区三区在线播放免费观看| 欧美a在线观看| 免费在线欧美黄色| 久久久久久色| 久久国产精品免费精品3p| 精品一区二区三区视频在线播放 | 久久成人高清| 水蜜桃精品av一区二区| 欧美精品影院| 美女毛片一区二区三区四区最新中文字幕亚洲 | 国产欧美综合一区二区三区| 欧洲精品一区二区三区| 亚洲人成精品久久久|