国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

Mysql單表訪問方法圖文示例詳解

瀏覽:4日期:2023-07-12 19:49:57
目錄訪問方法的概念表結(jié)構(gòu)const訪問方法的概念

設(shè)計(jì)MySQL的大叔把MySQL執(zhí)行查詢語句的方式稱為訪問方法(access method)或者訪問類型。同一個(gè)查詢語句可以使用多種不同的訪問方法來執(zhí)行,雖然最后的查詢結(jié)果都是一樣的,但是不同的執(zhí)行方式話費(fèi)的時(shí)間成本可能差距甚大。就像是從北京南鑼鼓巷到什剎海,你可以打車去,也可以坐地鐵去,坐公交去,還可以騎共享單車去,當(dāng)然也可以走著去。

表結(jié)構(gòu)CREATE TABLE single_table( id int not null auto_increment, key1 VARCHAR(100), key2 int, key3 VARCHAR(100), key_part1 VARCHAR(100), key_part2 VARCHAR(100), key_part3 VARCHAR(100), common_field VARCHAR(100), PRIMARY KEY(id), key idx_key1(key1), unique key uk_key2(key2), key idx_key3(key3), key idx_key_part(key_part1,key_part2,key_part3))engine=INNODB charset=utf8mb4const

有時(shí)需要通過主鍵列定位一條記錄,如下:

select * from single_table where id = 12;

MySQL會(huì)直接利用主鍵值在聚簇索引中定位對(duì)應(yīng)的用戶記錄,如下:

與之類似,我們根據(jù)唯一二級(jí)索引列來定位一條記錄的速度也是賊快的。比如下面的查詢:

select * from single_talbe where key2 = 12;

這個(gè)查詢的執(zhí)行過程的示意圖如下:

可以看到這個(gè)查詢的執(zhí)行分為下面兩步:

步驟1. 在uk_key2對(duì)應(yīng)的B+樹索引中,根據(jù)key2列與常數(shù)的等值比較條件定位到一條二級(jí)索引記錄。步驟2. 然后再根據(jù)該記錄的id值到聚簇索引中獲取到完整的用戶記錄。

設(shè)計(jì)MySQL的大叔認(rèn)為,通過主鍵或者唯一二級(jí)索引列與常數(shù)的等值比較來定位一條記錄像是坐火箭一樣快的,所以他們把這種通過主鍵或者唯一二級(jí)索引列來定位一條記錄的訪問方法定義為const(意思是常數(shù)級(jí)別的,代價(jià)是可以忽略不計(jì)的)。不過這種const訪問方法只能在主鍵列或者唯一二級(jí)索引列與一個(gè)常數(shù)進(jìn)行等值比較時(shí)才有效。如果主鍵或者唯一二級(jí)索引的索引列由多個(gè)列構(gòu)成,則只有在索引列中的每一個(gè)列都與常數(shù)進(jìn)行等值比較時(shí),這個(gè)const訪問方法才有效(這是因?yàn)橹挥性谠撍饕拿恳粋€(gè)列都采用等值比較時(shí),才可以保證最多只有一條記錄符合搜索條件)。

對(duì)于唯一二級(jí)索引來說,在查詢列為null值時(shí),情況比較特殊。比如下面這樣:

select * from single_table where key2 is null;

因?yàn)槲ㄒ欢?jí)索引列并不限制null值的數(shù)量,所以上述語句可能訪問到多條記錄。也就是說上面這個(gè)語句不可以使用const訪問方法來執(zhí)行。

以上就是Mysql單表訪問方法的詳細(xì)內(nèi)容,更多關(guān)于Mysql單表訪問方法的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
主站蜘蛛池模板: 高邑县| 乐陵市| 丁青县| 南华县| 买车| 徐水县| 遂昌县| 灵宝市| 讷河市| 赣榆县| 灵台县| 玉门市| 日喀则市| 华亭县| 桐庐县| 德昌县| 清新县| 卢氏县| 曲松县| 勐海县| 泸溪县| 凤山县| 东光县| 白河县| 屏东市| 武隆县| 本溪市| 论坛| 庐江县| 喀喇沁旗| 呼图壁县| 宁德市| 丰顺县| 横峰县| 荣成市| 东至县| 工布江达县| 交城县| 勐海县| 丽水市| 滦南县|