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

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

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

瀏覽:251日期: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久久,三上悠亚国产精品一区二区三区
亚洲黄页一区| 精品国产一区二区三区性色av| 国产精品成人一区二区网站软件| 日本成人在线网站| 涩涩涩久久久成人精品| 亚洲日本国产| 日韩精品1区2区3区| 91午夜精品| 亚洲精品动态| 欧美午夜三级| 麻豆精品少妇| 国产精品久久久久久久久妇女| 精品久久一区| 成人自拍av| 国产亚洲毛片在线| 亚洲精品成a人ⅴ香蕉片| 日本强好片久久久久久aaa| 婷婷五月色综合香五月| 欧美精品国产| 韩国女主播一区二区三区| 91视频精品| 99久久亚洲精品蜜臀| 国产高清一区二区| 日韩精品一二三区| 97成人超碰| 久久一区视频| 亚洲人成在线网站| 黄色成人91| 日韩高清二区| 精品免费av| 亚洲福利一区| 中文字幕一区日韩精品| 日韩欧美激情电影| 国产一区二区三区四区五区传媒| 在线观看精品| 天堂成人国产精品一区| 国产精品最新自拍| 极品av在线| 欧美资源在线| 国产精品分类| 99久久夜色精品国产亚洲1000部| 玖玖精品视频| 精品久久中文| 视频在线观看一区| 免费精品一区| 影音先锋久久| 久久精品xxxxx| 岛国av免费在线观看| 红桃视频亚洲| 麻豆成人av在线| 一区在线免费观看| 你懂的网址国产 欧美| 99久久精品费精品国产| 日本天堂一区| 欧美日韩精品在线一区| 奇米777国产一区国产二区| 日韩一区电影| 日本中文字幕一区二区| 亚洲天堂免费电影| 日韩av不卡在线观看| 影视先锋久久| 美日韩一区二区三区| 国产一区日韩一区| 国产精品毛片久久久| 婷婷亚洲综合| 精品一区二区男人吃奶| 男女激情视频一区| 97精品一区二区| 视频一区日韩精品| 久久蜜桃av| 国产精品a级| 影音先锋久久精品| 中文字幕在线免费观看视频| 日韩高清一区在线| 伊人久久婷婷| 高潮久久久久久久久久久久久久| 乱人伦精品视频在线观看| 麻豆视频一区二区| 亚洲久久一区| 亚洲激情中文在线| 成人一区而且| 久久精品99国产国产精| 亚洲欧洲一区| 亚洲涩涩在线| 精品久久福利| 国产欧美日韩视频在线| 老牛影视一区二区三区| 女生影院久久| 美女尤物国产一区| 91亚洲无吗| 视频在线在亚洲| 亚洲电影在线| 精品国产亚洲日本| 日本麻豆一区二区三区视频| 尤物在线精品| 久久久久久久久99精品大| 久久不卡国产精品一区二区| 视频在线观看一区二区三区| 亚洲网站视频| 高清一区二区三区av| 国产精品www.| 欧美性www| 91麻豆精品| 日韩欧美精品一区二区综合视频| 亚洲欧美日本视频在线观看| 婷婷综合在线| 亚洲高清激情| 天堂中文av在线资源库| 国产精品a级| 国产情侣一区| 91精品尤物| 欧美欧美黄在线二区| 日本va欧美va瓶| 色婷婷成人网| 日本aⅴ免费视频一区二区三区| 亚洲精品乱码| 亚洲精品少妇| 日韩一区二区三区精品 | 日韩一区欧美二区| 欧美大黑bbbbbbbbb在线| 免费久久久久久久久| 伊人久久高清| 99tv成人| 婷婷亚洲五月色综合| 99热精品在线观看| 久热精品在线| 日本不卡视频在线| 国产调教一区二区三区| 国产精品4hu.www| 久久久精品国产**网站| 水蜜桃精品av一区二区| 精品日韩一区| 成人在线免费观看91| 在线看片福利| 正在播放日韩精品| 99精品美女| 亚洲欧美久久久| 日韩在线观看中文字幕| 日本不卡一区二区三区| 国产精品最新| 中文在线免费视频| 精品欧美久久| 美国三级日本三级久久99| 日韩精彩视频在线观看| 免费在线播放第一区高清av| av最新在线| 欧美不卡在线| 亚洲精品成人一区| 欧美国产另类| 福利一区二区免费视频| 欧美肉体xxxx裸体137大胆| 美女精品网站| 国产精品亚洲四区在线观看| 国产精品yjizz视频网| 亚洲精品在线观看91| 水蜜桃久久夜色精品一区的特点| 青草久久视频| 麻豆理论在线观看| 性欧美精品高清| 国产精品久久久久久久久久久久久久久| 国产一区调教| 国产亚洲激情| 久久精品天堂| 黄色亚洲精品| 97久久超碰| 久久精品免费一区二区三区| 中文不卡在线| 国内不卡的一区二区三区中文字幕| 国产综合婷婷| 欧美日韩精品一区二区三区视频 | 成人精品高清在线视频| 99日韩精品| 国产精品第一| 99久久久久国产精品| 亚洲区第一页| 激情黄产视频在线免费观看| 一区二区三区网站| 久久精品免费看| 在线视频精品| 麻豆成人在线观看| 欧美成人午夜| 国产精品欧美三级在线观看 | 国产精品任我爽爆在线播放| 日韩不卡免费高清视频| 亚洲精品黄色| 久久青草久久| 欧美日韩 国产精品| 欧美/亚洲一区| 国产精品流白浆在线观看| 亚洲高清影视| 精品亚洲二区| 亚洲日韩视频| 欧美一区二区三区高清视频| 国产精品日本一区二区三区在线| 美女亚洲一区| 黄色欧美在线| 欧美在线看片| 午夜在线观看免费一区| 欧美丰满日韩| 91精品国产自产观看在线|