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