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