{eval=Array;=+count(Array);}
“我是喲喲吼說科技,專注于數據網絡的回答,歡迎大家與我交流數據網絡的問題”
如題,在mysql中,分表查詢和索引查詢那種方式更快?
喲喲認為查詢速度的快慢要針對于表里數據的多少來定,并且分表查詢時也要將索引引入才能更快的將目標數據進行鎖定,單純的來對比分表查詢和索引查詢的話,個人感覺索引查詢相對比要快一些。
在mysql中為什么會建立多個表呢?
這是因為在龐大數據量存儲時,建立多個表可以將數據進行均勻的分布,每一個表內對應多帶帶的一項數據,查詢或調用時可以方便調取;若沒有分表的話,所有的數據可能存在一個表中,在寫入或查詢調取時會增加數據庫的負擔,延長查詢時間,增加磁盤的IO,因此針對大數據量存儲時最好建立不同類別的表,可以更方便更快捷的寫入并調取。
不論是分表查詢還是單表查詢一定要引入索引,這樣才能更快的定位目標數據。
因此喲喲認為,在數據量很大的情況下,建議分表+索引查詢可能速度更快,若數據量很小的情況下,直接索引查詢即可。
歡迎大家多多關注我,在下方評論區說出自己的見解。
通常使用MySQL時(其余的數據庫也一樣),大多數時候索引是必須要增加的,好處是查詢速度提升非常大,數據量越多越明顯;缺點是會對新增、修改、刪除的速度造成一定程度的影響,不過這個影響和查詢效率的提升相比,不值一提。
當單表中的數據量進一步增多,例如到了大幾千萬、幾億這個級別,單臺MySQL已經不足以支撐這么多的數據了,這時候就要考慮分區、分表或分庫了;當然分表之后,每一個子表中仍然可以有索引。
如果非要說分表查詢和索引查詢哪個快,當數據量沒達到需要分表的程度時,比如只有一百萬的數據量,我覺得還是索引查詢快,畢竟分表查詢還需要程序路由到數據所在的分區上,這個也是需要消耗時間的。
MySQL單表數據量在一千萬以內的時候,性能是比較好的,超過千萬性能會有下降,到了五六千萬以上,性能下降就比較明顯了,這是就要考慮分表了。
分表另外一個好處是,單個服務器的性能畢竟是有限的,例如磁盤的IO,分表后將子表部署在不同的磁盤上(也可以直接分庫),可以利用多臺服務器的資源,更好地支持高并發。
RANGE分區:根據某一個字段的區間,進行分區。比如按照id分區,1到10萬一個分區,10萬零1到20萬一個分區。
HASH分區:定義一個表達式,對表達式的結果進行分區選擇。例如把id和某個整數進行取模運算,結果為1的是一個分區,結果是2的一個分區。
業務字段分區:這個就容易理解了,在業務數據中選擇一個合適的字段,作為分區字段。比如按照公司碼分區,companyCode=1(北京)為一個分區,companyCode=2(天津)為一個分區;當然,一般不會選擇companyName=北京/天津這樣的字段;不過這種分表策略,不能保證數據平均,比如北京有五千萬數據,天津有五百萬數據。
分表/分庫雖然看起來很美好,但是問題也不少:跨庫關聯、分布式事務、結果集合并/排序等問題,都是需要考慮解決的。
謝謝邀請!
查詢快慢主決的因素有很多,存儲碎片、數據量大屬于I/O類問題;表結構設計、查詢語句屬于技術是否熟練(經驗)問題。對于你的分表快還是索引快的這個問題本身就是有問題的:
在建立數據表的時候,索引是必須的,主鍵就是唯一索引,
我認為需要關注查詢快慢的時候,必定是單表數據量越來越大,或是已預見數據量會越來越大,例如日志表、流水記錄等,要不就是查詢時關聯的表比較多。
如果是像配置類數據表數據量有限的表,加不加除了主鍵以外索引影響不大。
基于單數據庫來說,
那么數據量大,增速快的表要想加查詢速度的首先索引是必須的,再加上分區或是分表才能有效的提升效率,有必要還可以做讀寫分離,
但是在做分表時怎么分就要講究了,分表可以按字段(縱向)分,也可以按某(些)字段的值特性(橫向)去分,總之要盡量達到在同一分表中的數據特性相同,在生成SQL時,代碼可以決定向哪幾個分表查,達到避免查詢無關的分表,查詢的表越少,需要掃描的記錄越少,效率肯定越高,如果達不到減少讀表和記錄的話,分表不但不會變快,反而變慢。
即時原創回答,個人的一些體驗,僅供參考!
當然索引快,沒有索引要線性搜索,如果記錄靠后幾乎是全表搜索。理論上只要有索引,搜索速度跟記錄數沒有關系,索引是一張獨立的HASH表。但記錄數多的時候,寫入索引會變慢。
分表呢只是解決表文件大小問題,和索引不是一回事,而且MYSQL有分區表功能,不用手工維護分表。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答