1、案例一:大學(xué)有段時(shí)間學(xué)習(xí)爬蟲,爬取了知乎300w用戶答題數(shù)據(jù),存儲(chǔ)到mysql數(shù)據(jù)中。那時(shí)不了解索引,一條簡(jiǎn)單的“根據(jù)用戶名搜索全部回答的sql“需要執(zhí)行半分鐘左右,完全滿足不了正常的使用。
創(chuàng)新互聯(lián)公司長(zhǎng)期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為京口企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,京口網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
2、使用連接(JOIN)來代替子查詢(Sub-Queries)MySQL從1開始支持SQL的子查詢。這個(gè)技術(shù)可以使用SELECT語句來創(chuàng)建一個(gè)單列的查詢結(jié)果,然后把這個(gè)結(jié)果作為過濾條件用在另一個(gè)查詢中。
3、對(duì)查詢進(jìn)行優(yōu)化,應(yīng)盡量避免全表掃描,首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。應(yīng)盡量避免在 where 子句中使用!=或操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描。
SQL語句不要寫的太復(fù)雜。一個(gè)SQL語句要盡量簡(jiǎn)單,不要嵌套太多層。使用『臨時(shí)表』緩存中間結(jié)果。
convert 函數(shù) convert 函數(shù)類似于 introducer,不過只能指定字符集。 charset 函數(shù) 檢測(cè)字符串的字符集??梢詸z測(cè)出當(dāng)前字符串在當(dāng)前 session 的字符集。
這是mysql十分重要的配置變量之一,如果你對(duì)優(yōu)化和提高系統(tǒng)性能有興趣,可以從改變 key_buffer_size變量的值開始。
MySQL應(yīng)該采用編譯安裝的方式 MySQL數(shù)據(jù)庫(kù)的線上環(huán)境安裝,我建議采取編譯安裝,這樣性能會(huì)較大的提升。
從外在條件來說,優(yōu)化mysql涉及優(yōu)化硬件、優(yōu)化磁盤、優(yōu)化操作系統(tǒng)、選擇應(yīng)用編程接口等。優(yōu)化硬件 如果你需要龐大的數(shù)據(jù)庫(kù)表(2G),你應(yīng)該考慮使用64位的硬件結(jié)構(gòu),像Alpha、Sparc或即將推出的IA64。
案例一:大學(xué)有段時(shí)間學(xué)習(xí)爬蟲,爬取了知乎300w用戶答題數(shù)據(jù),存儲(chǔ)到mysql數(shù)據(jù)中。那時(shí)不了解索引,一條簡(jiǎn)單的“根據(jù)用戶名搜索全部回答的sql“需要執(zhí)行半分鐘左右,完全滿足不了正常的使用。
數(shù)據(jù)庫(kù)設(shè)計(jì)是基礎(chǔ),數(shù)據(jù)庫(kù)優(yōu)化是建立在設(shè)計(jì)基礎(chǔ)之上的。好的數(shù)據(jù)庫(kù)一定擁有好的設(shè)計(jì)。數(shù)據(jù)庫(kù)設(shè)計(jì)的目標(biāo)是為用戶和各種應(yīng)用系統(tǒng)提供一個(gè)信息基礎(chǔ)設(shè)施和高效的運(yùn)行環(huán)境。
show tables status: 查看數(shù)據(jù)庫(kù)表的底層大小以及表結(jié)構(gòu),同樣可以從information_schema.tables表中獲得底層表的信息。show [global|session]status:可以查看mysql服務(wù)器當(dāng)前內(nèi)部狀態(tài)信息。
mysql_query(COMMIT);鎖定表,優(yōu)化事務(wù)處理:a.我們用一個(gè) SELECT 語句取出初始數(shù)據(jù),通過一些計(jì)算,用 UPDATE 語句將新值更新到表中。
1、mysql數(shù)據(jù)中有多種索引類型,primarykey,unique,normal,但底層存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)都是BTREE;有些存儲(chǔ)引擎還提供hash索引,全文索引。BTREE是常見的優(yōu)化要面對(duì)的索引結(jié)構(gòu),都是基于BTREE的討論。
2、數(shù)據(jù)庫(kù)設(shè)計(jì)是基礎(chǔ),數(shù)據(jù)庫(kù)優(yōu)化是建立在設(shè)計(jì)基礎(chǔ)之上的。好的數(shù)據(jù)庫(kù)一定擁有好的設(shè)計(jì)。數(shù)據(jù)庫(kù)設(shè)計(jì)的目標(biāo)是為用戶和各種應(yīng)用系統(tǒng)提供一個(gè)信息基礎(chǔ)設(shè)施和高效的運(yùn)行環(huán)境。
3、使用聯(lián)合(UNION)來代替手動(dòng)創(chuàng)建的臨時(shí)表 MySQL從0的版本開始支持union查詢,它可以把需要使用臨時(shí)表的兩條或更多的select查詢合并的一個(gè)查詢中。
4、SQL Mode及相關(guān)問題等。優(yōu)化篇主要適合于開發(fā)人員和數(shù)據(jù)庫(kù)管理員,內(nèi)容包括常用SQL技巧和常見問題、SQL優(yōu)化、優(yōu)化數(shù)據(jù)庫(kù)對(duì)象、鎖問題、優(yōu)化 MySQL Server、磁盤I/O問題、應(yīng)用優(yōu)化等。