通常使用mysql時(其餘的資料庫也一樣),大多數時候索引是必須要增加的,好處是查詢速度提公升非常大,資料量越多越明顯;缺點是會對新增、修改、刪除的速度造成一定程度的影響,不過這個影響和查詢效率的提公升相比,不值一提。
當單錶中的資料量進一步增多,例如到了大幾千萬、幾億這個級別,單台mysql已經不足以支撐這麼多的資料了,這時候就要考慮分割槽、分表或分庫了;當然分表之後,每乙個子表中仍然可以有索引。
如果非要說分表查詢和索引查詢哪個快,當資料量沒達到需要分表的程度時,比如只有一百萬的資料量,我覺得還是索引查詢快,畢竟分表查詢還需要程式路由到資料所在的分割槽上,這個也是需要消耗時間的。
mysql單錶資料量在一千萬以內的時候,效能是比較好的,超過千萬效能會有下降,到了五六千萬以上,效能下降就比較明顯了,這是就要考慮分表了。
分表另外乙個好處是,單個伺服器的效能畢竟是有限的,例如磁碟的io,分表後將子表部署在不同的磁碟上(也可以直接分庫),可以利用多台伺服器的資源,更好地支援高併發。
分表/分庫雖然看起來很美好,但是問題也不少:跨庫關聯、分布式事務、結果集合並/排序等問題,都是需要考慮解決的。
SHOW INDEX查詢MySQL表索引
show index通常用來查詢表結構中的索引情況 表的結構 login total 2018 create table login total 2018 id int 11 not null,tdate date not null comment 登入時間 agent id int 11 not ...
Mysql索引和查詢優化
索引基數 基數是資料列所包含的不同值的數量。例如,某個資料列包含值1 3 7 4 7 3,那麼它的基數就是4 索引的基數相對於資料表行數較高 也就是說,列中包含很多不同的值,重複的值很少 的時候,它的工作效果最好。如果某資料列含有很多不同的年齡,索引會很快地分辨資料行。如果某個資料列用於記錄性別 只...
MySQL的回表查詢與索引覆蓋查詢
上篇講到,mysql中分為聚集索引和非聚集索引。非聚集索引的btree葉子節點中儲存的是當行資料的pk。所以為了取到具體資料,則需要通過pk回到聚集索引裡去查詢資料。著就叫回表查詢。掃瞄了2次索引樹。所以效率相對較低。假設有個t表,如下圖所示。id是聚集索引,name則是普通索引。idname 1小...