国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

教你如何編寫高效的MySQL數(shù)據(jù)庫(kù)應(yīng)用

2024-07-25 19:09:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
借助諸如Apach、Perl、PHP和Python等工具,構(gòu)建一個(gè)MySQL應(yīng)用時(shí)很容易的。然而確保它們運(yùn)行快速,則需要一點(diǎn)洞察力。本文就是你需要知道的東西。

MySQL對(duì)于成為一個(gè)非常快速的數(shù)據(jù)庫(kù)服務(wù)器有著當(dāng)之無(wú)愧的名聲,它也非常容易設(shè)置和使用。隨著它作為網(wǎng)站后端數(shù)據(jù)庫(kù)得聲望日增,其效果在去年開始有明顯提高。但是很多MySQL用戶更多地知道如何創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)并編寫對(duì)它的查詢。就像成千上萬(wàn)的人通過(guò)載閑暇時(shí)用Linux做實(shí)驗(yàn)來(lái)學(xué)習(xí)Unix那樣,很多人通過(guò)玩MySQL學(xué)習(xí)關(guān)系數(shù)據(jù)庫(kù)。這些MySQL新手的大多數(shù)既沒有關(guān)系數(shù)據(jù)庫(kù)理論的背景,又沒有時(shí)間閱讀MySQL手冊(cè)全文。

因此,我們決定研究某些方法,你可以用針對(duì)優(yōu)化性能來(lái)調(diào)節(jié)MySQL。在讀完本文后,你將理解一些幫助你設(shè)計(jì)你的MySQL數(shù)據(jù)庫(kù)和查詢的技術(shù),值得你的應(yīng)用很有效率。我們將假定你熟悉MySQL和SQL基礎(chǔ),但不假定你有這兩方面的廣博知識(shí)。

只存儲(chǔ)你需要的信息

這聽上去是常識(shí),但人們常常采取“廚房下水道”的方式進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)。他們認(rèn)為可能項(xiàng)要得每樣?xùn)|西都要存儲(chǔ)并設(shè)計(jì)數(shù)據(jù)庫(kù)保存所有者這些數(shù)據(jù)。你需要對(duì)你的需求現(xiàn)實(shí)些,并確定取確實(shí)需要什么信息。你常常能隨意產(chǎn)生一些數(shù)據(jù)而不把它存在數(shù)據(jù)庫(kù)表中。在這種情況下,從一個(gè)應(yīng)用開發(fā)者的角度看也有道理這樣做。

例如,在線目錄的產(chǎn)品表可能包含各種產(chǎn)品的名稱、介紹、尺寸、重量和價(jià)格。除了價(jià)格,你可能想存儲(chǔ)每個(gè)項(xiàng)目相關(guān)的稅和運(yùn)輸成本。但實(shí)際上不必這樣做。首先稅和運(yùn)輸成本可以方便地(由你的應(yīng)用或MySQL)計(jì)算出來(lái)。其次,如果稅和運(yùn)輸成本改變了,你可能必須編寫必要的查詢更新每個(gè)產(chǎn)品記錄中的稅和運(yùn)輸?shù)馁M(fèi)率。

有時(shí)人們認(rèn)為這太難不能在以后往數(shù)據(jù)庫(kù)表中加入字段,所以他們感覺不得不定義盡可能多的列。這是明顯的概念錯(cuò)誤。在MySQL中,你可以用ALTER TABLE命令方便地修改表定義以適應(yīng)你改變的需求。

例如,如果你突然認(rèn)識(shí)到你需要給你的產(chǎn)品表增加一個(gè)級(jí)別列(可能你想允許用戶在你的目錄中給產(chǎn)品評(píng)級(jí)),你可以這樣做:


ALTER TABLE products ADD rank INTEGER
 

這給你的產(chǎn)品表增加了一個(gè)整數(shù)類型的級(jí)別列,你能用ALTER TABLE做什么的完整介紹參見MySQL手冊(cè)。

只要求你需要的東西--要清晰

就像說(shuō)“只存儲(chǔ)你需要的東西”那樣,這可能看來(lái)是常識(shí),但這一點(diǎn)常常被忽視,為什么呢?因?yàn)樵谝粋€(gè)應(yīng)用開發(fā)時(shí),需求經(jīng)常改變,所以很多查詢最終看來(lái)是這樣:

SELECT * FROM sometable
 
當(dāng)你不能肯定你將需要哪一列時(shí),要求所有列明顯是最省力的事情,然而隨著你的表不斷增大和修改,這可能變成一個(gè)性能問題。最好是在你的最初開發(fā)完成后再花些時(shí)間并確定你真正從你的查詢中需要什么:

SELECT name, rank, description FROM products
 
這帶來(lái)了一個(gè)相關(guān)的觀點(diǎn),即代碼維護(hù)比性能更重要。大多數(shù)變成語(yǔ)言(Perl、Python、PHP、Java等)允許通過(guò)字段名和數(shù)字編號(hào)訪問一條查詢的結(jié)果,這意味著你可以訪問命名字段或字段0都可以得到相同的數(shù)據(jù)。

長(zhǎng)期看,最好使用列名而不是其編號(hào)位置,為什么?因?yàn)橐粋€(gè)表中或一條查詢中地列的相對(duì)位置可以改變。它們?cè)诒碇锌赡芤驗(yàn)橹貜?fù)使用ALTER TABLE而改變,它們?cè)诓樵冎袑⒁蛑貙懥瞬樵兌浉聭?yīng)用邏輯來(lái)匹配而改變。

當(dāng)然,你仍然需要小心改變列名!但如果你使用列名而非標(biāo)號(hào)位置,如列名改變,你可以用grep搜索源代碼或使用編輯器的搜索能力查找你需要修改的代碼。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 英吉沙县| 鄂伦春自治旗| 保德县| 皮山县| 高邮市| 柯坪县| 怀安县| 雷州市| 涿州市| 迁安市| 江阴市| 武宣县| 新化县| 宜昌市| 驻马店市| 汶上县| 报价| 宁海县| 稻城县| 呈贡县| 莒南县| 阿尔山市| 德清县| 永靖县| 锡林郭勒盟| 海淀区| 金华市| 潮州市| 沂南县| 安吉县| 定兴县| 斗六市| 平罗县| 昭通市| 南丹县| 临泉县| 志丹县| 扎兰屯市| 太湖县| 菏泽市| 夏河县|