mysql怎么處理一秒10萬并發(fā)?
mysql的高并發(fā)有:優(yōu)化SQL語句、優(yōu)化數(shù)據(jù)庫字段、添加緩存、分區(qū)表、讀寫分離、垂直拆分、解耦模塊、水平拆分等。
高并發(fā)的瓶頸大多在后臺(tái)。存儲(chǔ)mysql的常規(guī)優(yōu)化方案如下:
(1)代碼中的sql語句優(yōu)化
(2)數(shù)據(jù)庫字段優(yōu)化和索引優(yōu)化
(3)添加緩存、redis/memcache等。
(4)主從式,讀寫分離
(5)分區(qū)表
(6)垂直分離和解耦模塊
(7)水平分割
方案分析:
1.方法1方法2是最簡單快捷的提高效率的方法。因?yàn)槊織l語句都命中索引,所以效率最高。但是,如果構(gòu)建索引是為了優(yōu)化sql,那么索引將被淹沒。對(duì)于1000萬級(jí)以上的表,維護(hù)索引的成本會(huì)大大增加,增加數(shù)據(jù)庫的內(nèi)存開銷。
2.數(shù)據(jù)庫字段的優(yōu)化。有一次發(fā)現(xiàn)一個(gè)高級(jí)程序員s設(shè)計(jì)一個(gè)表字段,一個(gè)日期類型,被設(shè)計(jì)成varchar類型,不規(guī)范,同時(shí)無法檢查寫入的數(shù)據(jù),索引的效率也不一樣。
3.緩存適用于讀寫更新頻率相對(duì)較低的業(yè)務(wù)場景,否則緩存異議不大,命中率低。總的來說,緩存主要是為了提高接口處理速度,減少并發(fā)帶來的db壓力以及由此帶來的其他問題。
4.分區(qū)不是表,但結(jié)果仍然是表,只是存儲(chǔ)的數(shù)據(jù)文件被分成了幾個(gè)小塊。在表數(shù)據(jù)非常大的情況下,可以解決無法一次性加載到內(nèi)存中,維護(hù)大表數(shù)據(jù)的問題。
5.垂直拆分將一個(gè)表按列拆分成多個(gè)表,常見的是將主表的擴(kuò)展數(shù)據(jù)和文本數(shù)據(jù)分開,減輕磁盤io的壓力。
6.水平分割。水平拆分的主要目的是提高單個(gè)表的并發(fā)讀寫能力(壓力分散到各個(gè)子表)和磁盤的IO性能(一個(gè)非常大的。MYD文件在。每個(gè)子表的MYD文件)。如果沒有一千萬級(jí)別以上的數(shù)據(jù),為什么要拆分?也可以只優(yōu)化一個(gè)表。如果沒有太多并發(fā),分區(qū)表一般都能滿足。所以一般來說,橫劈是最后的選擇,在設(shè)計(jì)上還是需要循序漸進(jìn)。
如何強(qiáng)制mysql使用某一個(gè)index?
根據(jù)mysql文檔,第一個(gè)是多列索引,可用于指定已知范圍內(nèi)的user_id或user_id和blog_id的值的查詢。
第二個(gè)是定義兩個(gè)單列索引。如果單列和多列索引同時(shí)存在,mysql優(yōu)化器會(huì)通過決定哪個(gè)索引找到的行數(shù)更少并使用它來獲取行,來嘗試找到一個(gè)更具限制性的索引。以上來自我個(gè)人對(duì)mysql幫助文檔的理解,歡迎Daniel■批評(píng)指正。