高清国产av一区二区三区_亚洲欧美日韩在线_无码熟妇人妻av在线影片免费_在线无码一级伊伊_爽好舒服高H自慰软件_亚洲熟女区偷拍区高清区_午夜福利影院啪啪_亚洲国产黄片在线播放_中文字幕日韩精品乐乐影院_久久国产亚洲日韩欧美精品

掃描二維碼關(guān)注

首頁(yè) APP開(kāi)發(fā)小程序開(kāi)發(fā) 微信公眾號(hào) 網(wǎng)站建設(shè) 營(yíng)銷(xiāo)推廣 經(jīng)典案列 產(chǎn)品服務(wù) 關(guān)于我們

“學(xué)習(xí)不僅是掌握知識(shí)”

向書(shū)本學(xué)習(xí),還要向?qū)嵺`學(xué)習(xí)、向生活學(xué)習(xí)。消化已有知識(shí),
而且要力求有所發(fā)現(xiàn)、有所發(fā)明、有所創(chuàng)造

WEB應(yīng)用數(shù)據(jù)庫(kù)訪問(wèn)的優(yōu)化

2019/3/16 10:48:36

WEB應(yīng)用數(shù)據(jù)庫(kù)訪問(wèn)的優(yōu)化

如果只是少量的頁(yè)面訪問(wèn)有問(wèn)題(性能問(wèn)題)時(shí),優(yōu)化是非常簡(jiǎn)單的。如果是“所有的都慢”,需要如何做呢?

看那些來(lái)自于數(shù)據(jù)庫(kù)并且在頁(yè)面上顯示的信息。這是重要的,因?yàn)檫@些信息是需要用這樣或那樣的方法從數(shù)據(jù)庫(kù)中讀取出來(lái)的,如果確實(shí)是打算這樣顯示的話。任務(wù)就是要使用最高效的方法,從數(shù)據(jù)庫(kù)中得到這些信息。

考查這些信息的動(dòng)態(tài)性。如果很少改變,或者干脆就是靜態(tài)的,那么比較好的方法是預(yù)先創(chuàng)建(pre-create)或者緩存(http: //www.mysqlperformanceblog.com/2006/08/09/cache-performance-comparison/)它。有非常多的緩存和預(yù)建技術(shù)(http://www.mysqlperformanceblog.com/2006/08/08/caching- techinques/)可以使用。只是要記住,優(yōu)化數(shù)據(jù)庫(kù)訪問(wèn)的最好的方法,就是避免訪問(wèn)數(shù)據(jù)庫(kù)。這對(duì)于其他的類(lèi)似事情也適用----如果可以完全避免動(dòng)態(tài)頁(yè)面的產(chǎn)生,并且使用服務(wù)器的緩存來(lái)解決,就更好了。

檢查從數(shù)據(jù)庫(kù)讀出的數(shù)據(jù)與需要顯示的信息是否相符。從數(shù)據(jù)庫(kù)出讀取的信息,往往比生成頁(yè)面所需要的信息要多。輕一點(diǎn)的像是SELECT * FROM tbl,而不是只列出那些真正需要的列;嚴(yán)重的可以是用SELECT * FROM tbl來(lái)計(jì)算表中有多少行記錄(不是開(kāi)玩笑)。有時(shí)候會(huì)看到查詢了100個(gè)stories,其中任一個(gè)會(huì)被選擇顯示出來(lái),由應(yīng)用程序?qū)幼鲞^(guò)濾。有時(shí)候在應(yīng)用程序?qū)舆@樣做是高效的,但是通常應(yīng)該使查詢只返回需要的信息。

檢查結(jié)果集的記錄數(shù)。這是非常重要、而且經(jīng)常被遺忘的步驟。如果一個(gè)查詢返回很少的行數(shù),有些人就認(rèn)為它是簡(jiǎn)單的,而真正重要的是這個(gè)查詢分析了多少行數(shù)據(jù)。比如SELECT COUNT(*) FROM links WHERE domain='mysql.com'; 只返回一行,但卻掃描了成千上萬(wàn)的記錄(或者索引節(jié)點(diǎn))。其他通常的殺手查詢是GROUP BY查詢和SORT查詢 ---- SELECT name,descr FROM titles ORDER BY rank DESC LIMIT 10 ----如果沒(méi)有適當(dāng)?shù)乃饕?,就?huì)使用“filesort”,會(huì)有些問(wèn)題。此外就是JOIN(關(guān)聯(lián))---- 關(guān)聯(lián)是高代價(jià)的(當(dāng)然是相對(duì)的),并且確實(shí)增加了為了產(chǎn)生結(jié)果集而使用的數(shù)據(jù)量 ---- 如果不得不關(guān)聯(lián)10個(gè)表來(lái)組合出想要的結(jié)果,那么會(huì)比從一個(gè)表中得到同樣的數(shù)據(jù)要慢很多。

檢查結(jié)果集的生成實(shí)際需要的記錄數(shù)。有時(shí)查詢需要使用大量數(shù)據(jù)來(lái)產(chǎn)生結(jié)果集,是因?yàn)闆](méi)有適當(dāng)?shù)乃饕?---- 這是容易發(fā)生的。比如我們的ORDER BY rank 查詢就是這樣 ---- 為rank列增加索引,會(huì)使這個(gè)查詢僅使用10行數(shù)據(jù)來(lái)返回10行 ---- 恰恰是我們想要的。然而我們的COUNT(*)查詢是不同的 ---- 即使在domain列上有索引,它仍然需要掃描很多行數(shù)據(jù)來(lái)得到結(jié)果集。這樣的查詢需要重新設(shè)計(jì),而不是簡(jiǎn)單地調(diào)整 ---- 比如匯總表(summary table)保存了每個(gè)域的link數(shù)量,就可以解決。

檢查查詢的次數(shù)。如果可以使用一個(gè)查詢得到所需要的數(shù)據(jù),那么就好于用多個(gè)查詢得到同樣的數(shù)據(jù),前提是這一個(gè)查詢不會(huì)因?yàn)榕c那些查詢優(yōu)化方式不同而需要分析更多行的數(shù)據(jù)。這里一個(gè)典型的例子是SELECT * FROM tbl WHERE id=5 執(zhí)行了很多次,每次使用不同的常量 ---- 用類(lèi)似 IN(5,7,4,56) 來(lái)替換是非常有效的。但也不要被這樣的方法迷住。我曾經(jīng)看到有人嘗試用UNION(需要適當(dāng)填充以使不同的字段數(shù)目及類(lèi)型能夠匹配)連接所有的查詢--- -這不是個(gè)好主意。然而,如果可以減小查詢的次數(shù),而又不會(huì)增加應(yīng)用程序架構(gòu)的復(fù)雜性,那么是值得做的。
 


深圳市南山區(qū)南山街道南海大道西桂廟路北陽(yáng)光華藝大廈1棟4F、4G-04

咨詢電話:136 8237 6272
大客戶咨詢:139 0290 5075
業(yè)務(wù)QQ:195006118
技術(shù)QQ:179981967

精銳軟件

Copyright? 2018-2023 深圳精銳軟件技術(shù)有限公司 All Rights Reserved. ICP備案號(hào):粵ICP備18108116號(hào)-8 公安備案號(hào):粵公網(wǎng)安備44030502009460號(hào)