在老版本的MySQL 3.22中,MySQL的單表限大小為4GB,當(dāng)時(shí)的MySQL的存儲(chǔ)引擎還是ISAM存儲(chǔ)引擎。但是,當(dāng)出現(xiàn)MyISAM存儲(chǔ)引擎之后,也就是從MySQL 3.23開始,MySQL單表最大限制就已經(jīng)擴(kuò)大到了64PB了(官方文檔顯示)。也就是說,從目前的技術(shù)環(huán)境來看,MySQL數(shù)據(jù)庫的MyISAM存儲(chǔ) 引擎單表大小限制已經(jīng)不是有MySQL數(shù)據(jù)庫本身來決定,而是由所在主機(jī)的OS上面的文件系統(tǒng)來決定了。
在海寧等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需開發(fā)網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營銷,成都外貿(mào)網(wǎng)站制作,海寧網(wǎng)站建設(shè)費(fèi)用合理。
而MySQL另外一個(gè)最流行的存儲(chǔ)引擎之一Innodb存儲(chǔ)數(shù)據(jù)的策略是分為兩種的,一種是共享表空間存儲(chǔ)方式,還有一種是獨(dú)享表空間存儲(chǔ)方式。
當(dāng)使用共享表空間存儲(chǔ)方式的時(shí)候,Innodb的所有數(shù)據(jù)保存在一個(gè)單獨(dú)的表空間里面,而這個(gè)表空間可以由很多個(gè)文件組成,一個(gè)表可以跨多個(gè)文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。從Innodb的官方文檔中可以看到,其表空間的最大限制為64TB,也就是說,Innodb的單 表限制基本上也在64TB左右了,當(dāng)然這個(gè)大小是包括這個(gè)表的所有索引等其他相關(guān)數(shù)據(jù)。
而當(dāng)使用獨(dú)享表空間來存放Innodb的表的時(shí)候,每個(gè)表的數(shù)據(jù)以一個(gè)單獨(dú)的文件來存放,這個(gè)時(shí)候的單表限制,又變成文件系統(tǒng)的大小限制了。
問題在這個(gè)地方,去掉索引長度 (191),就可以使用到索引。
這里使用的兩邊%,同時(shí)字段符合覆蓋索引,但是設(shè)置了前綴索引,因此查詢用不到索引。
查到的一個(gè)說法:
MySQL 不能在 ORDER BY 或 GROUP BY 中使用前綴索引,也不能把它們用作覆蓋索引(Covering Index)。
去掉索引長度后的執(zhí)行結(jié)果
1、關(guān)聯(lián)的字段又空值
2、使用了大于、小于、in等關(guān)鍵字進(jìn)行關(guān)聯(lián)
當(dāng)你source字段唯一性不高,例如你90w數(shù)據(jù),里面source字段來來去去就那么十幾個(gè)值,這種情況下影響結(jié)果集巨大,就會(huì)全表掃描。這種情況全表掃描還要快于利用索引,只要理解索引的本質(zhì)不難明白MySQL為何不使用索引。
極端點(diǎn)的情況,90萬的數(shù)據(jù),source只有0和1兩個(gè)值,利用索引要先讀索引文件,然后二分查找,找到對(duì)應(yīng)數(shù)據(jù)的數(shù)據(jù)磁盤指針,再根據(jù)讀到的指針再讀磁盤上對(duì)應(yīng)的數(shù)據(jù)數(shù)據(jù),影響結(jié)果集45萬。這種情況,和直接全表掃描那個(gè)快顯而易見。
如果你source字段是一個(gè)unique,就會(huì)用到索引。
如果你一定要用索引,可以用force index,不過效率不會(huì)有改善一般還會(huì)更慢就是了。
類似地,如果WHERE子句的查詢條件里使用了函數(shù)(WHERE DAY(column) = …),MySQL也將無法使用索引。在JOIN操作中(需要從多個(gè)數(shù)據(jù)表提取數(shù)據(jù)時(shí)),MySQL只有在主鍵和外鍵的數(shù)據(jù)類型相同時(shí)才能使用索引。如果WHERE子句的查詢條件里使用比較操作符LIKE和REGEXP,MySQL只有在搜索模板的第一個(gè)字符不是通配符的情況下才能使用索引。 比如說, 如果查詢條件是LIKE ‘a(chǎn)bc%’,MySQL將使用索引;如果查詢條件是LIKE ‘%abc’,MySQL將不使用索引。在ORDER BY操作中,MySQL只有在排序條件不是一個(gè)查詢條件表達(dá)式的情況下才使用索引。 (雖然如此,在涉及多個(gè)數(shù)據(jù)表查詢里,即使有索引可用,那些索引在加快 ORDER BY方面也沒什么作用) 如果某個(gè)數(shù)據(jù)列里包含許多重復(fù)的值,就算為它建立了索引也不會(huì)有很好的效果。 頂一下(0)0%踩一下(0)0%