mysql中,分表查詢和索引查詢哪個更快?

dr259

“我是喲喲吼說科技,專注於數據網絡的回答,歡迎大家與我交流數據網絡的問題”

如題,在mysql中,分表查詢和索引查詢那種方式更快?

喲喲認為查詢速度的快慢要針對於表裡數據的多少來定,並且分表查詢時也要將索引引入才能更快的將目標數據進行鎖定,單純的來對比分表查詢和索引查詢的話,個人感覺索引查詢相對比要快一些。

在mysql中為什麼會建立多個表呢?

這是因為在龐大數據量存儲時,建立多個表可以將數據進行均勻的分佈,每一個表內對應單獨的一項數據,查詢或調用時可以方便調取;若沒有分表的話,所有的數據可能存在一個表中,在寫入或查詢調取時會增加數據庫的負擔,延長查詢時間,增加磁盤的IO,因此針對大數據量存儲時最好建立不同類別的表,可以更方便更快捷的寫入並調取。

索引是對數據庫表中一列或多列的值進行排序的結構,用於快速查詢數據庫表中的特定記錄,提高查詢速度。

不論是分表查詢還是單表查詢一定要引入索引,這樣才能更快的定位目標數據。

因此喲喲認為,在數據量很大的情況下,建議分表+索引查詢可能速度更快,若數據量很小的情況下,直接索引查詢即可。


喲喲吼說科技

查詢快慢主決的因素有很多,存儲碎片、數據量大屬於I/O類問題;表結構設計、查詢語句屬於技術是否熟練(經驗)問題。對於你的分錶快還是索引快的這個問題本身就是有問題的:

在建立數據表的時候,索引是必須的,主鍵就是唯一索引,

我認為需要關注查詢快慢的時候,必定是單表數據量越來越大,或是已預見數據量會越來越大,例如日誌表、流水記錄等,要不就是查詢時關聯的表比較多。

如果是像配置類數據表數據量有限的表,加不加除了主鍵以外索引影響不大。

基於單數據庫來說,

那麼數據量大,增速快的表要想加查詢速度的首先索引是必須的,再加上分區或是分表才能有效的提升效率,有必要還可以做讀寫分離,

但是在做分表時怎麼分就要講究了,分表可以按字段(縱向)分,也可以按某(些)字段的值特性(橫向)去分,總之要儘量達到在同一分表中的數據特性相同,在生成SQL時,代碼可以決定向哪幾個分表查,達到避免查詢無關的分表,查詢的表越少,需要掃描的記錄越少,效率肯定越高,如果達不到減少讀表和記錄的話,分表不但不會變快,反而變慢。


仰望星的那頭

當然索引快,沒有索引要線性搜索,如果記錄靠後幾乎是全表搜索。理論上只要有索引,搜索速度跟記錄數沒有關係,索引是一張獨立的HASH表。但記錄數多的時候,寫入索引會變慢。

分表呢只是解決表文件大小問題,和索引不是一回事,而且MYSQL有分區表功能,不用手工維護分表。


分享到:


相關文章: