偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

MySQL數(shù)據(jù)庫開發(fā)必備常識

數(shù)據(jù)庫 MySQL
MySQL數(shù)據(jù)庫是開放源代碼,雖然功能未必很強大,但因為它的開源、廣泛傳播,導(dǎo)致很多人都了解到這個數(shù)據(jù)庫。MySQL數(shù)據(jù)庫的開發(fā)在MySQL數(shù)據(jù)庫發(fā)展歷程中也是很重要的,本文介紹MySQL數(shù)據(jù)庫開發(fā)必備常識。

導(dǎo)讀:眾所周知,系統(tǒng)讀取數(shù)據(jù)時,從內(nèi)存中讀取要比從硬盤上速度要快好幾百倍。故現(xiàn)在絕大部分應(yīng)用系統(tǒng),都會最大程度的使用緩存(內(nèi)存中的一個存儲區(qū)域),來提高系統(tǒng)的運行效率。MySQL數(shù)據(jù)庫也不例外。在這里,筆者將結(jié)合自己的工作經(jīng)驗,跟大家探討一下,MySQL數(shù)據(jù)庫中緩存的管理技巧:如何合理配置MySQL數(shù)據(jù)庫緩存,提高緩存命中率。

 

一、什么時候應(yīng)用系統(tǒng)會從緩存中獲取數(shù)據(jù)?

  數(shù)據(jù)庫從服務(wù)器上讀取數(shù)據(jù)時,可以從硬盤的數(shù)據(jù)文件中獲取數(shù)據(jù),也可以從數(shù)據(jù)庫緩存中讀取數(shù)據(jù)。現(xiàn)在數(shù)據(jù)庫管理員需要搞清楚的是,在什么樣的情況下,系統(tǒng)是從緩存中讀取數(shù)據(jù),而不是從硬盤的數(shù)據(jù)文件中讀取數(shù)據(jù)?

  簡單的說,數(shù)據(jù)緩存就是內(nèi)存中的一塊存儲區(qū)域,其存儲了用戶的SQL文本以及相關(guān)的查詢結(jié)果。通常情況下,用戶下次查詢時,如果所使用的SQL文本是相同的,并且自從上次查詢后,相關(guān)的紀錄沒有被更新過,此時數(shù)據(jù)庫就直接采用緩存中的內(nèi)容。從這個原則中,可以看到如果要直接使用緩存中的數(shù)據(jù),至少要滿足以下幾個條件。

  一是所采用的SQL文本是相同的。當前后兩次用戶使用了相同的SQL語句(假設(shè)不考慮其他條件),則服務(wù)器會從緩存中讀取結(jié)果,而不需要再去解析和執(zhí)行SQL語句。這里需要注意的是,這里的SQL文本必須一次不差的完全相同。如果前后兩次查詢,使用了不同的查詢條件。如第一次查詢時沒有輸入Where條件語句。后來發(fā)現(xiàn)數(shù)據(jù)量過多,利用了Where條件了過濾查詢的結(jié)果。此時即使最后的查詢結(jié)果是相同的,系統(tǒng)仍然是從數(shù)據(jù)文件中獲取數(shù)據(jù),而不是從數(shù)據(jù)緩存中。再如,Select后面所使用的字段名稱也必須是相同的。如果有一個字段名稱不同或者前后兩次查詢所使用的字段數(shù)量不同,則系統(tǒng)都會認為是不同的SQL語句,而重新解析并查詢。

  二是從數(shù)據(jù)緩存的角度考慮,大小寫是不敏感的。如前后兩次查詢時,采用的字段名稱可能只有大小寫的差異。如第一次使用的是大小,第二次使用的是小寫,這系統(tǒng)認為仍然是相同的SQL語句。或者說關(guān)鍵字大小寫等等這都是不敏感的。

  三是要滿足二次查詢之間,數(shù)據(jù)記錄包括表結(jié)構(gòu)都沒有被更改過。如果記錄所在的標更改了,如增加了一個字段等等,此時使用這個表的所有緩沖數(shù)據(jù)系統(tǒng)將自動清空。這里需要注意,這里指的更改是一個廣義的更改,包括表中任何數(shù)據(jù)或者結(jié)果的改變。舉一個簡單的例子,第一次查詢時用戶需要查詢2010年的出貨數(shù)據(jù)。查詢后有用戶在這個表中插入了一條2011年1月份的出貨信息。然后又有用戶需要查詢2010年的出貨信息。使用的SQL語句與第一次查詢時完全相同。在這種情況下,數(shù)據(jù)庫系統(tǒng)會使用緩存中的數(shù)據(jù)嗎?答案是否定的。因為當中間用戶插入一條記錄時,系統(tǒng)會自動清空跟這個表相關(guān)的所有緩存記錄。當?shù)诙尾樵儠r,緩存中已經(jīng)沒有這張表對應(yīng)的緩存信息。此時就需要重新解析并查詢。

  四是需要注意,默認字符集對緩存命中率的影響。通常情況下,如果客戶端與服務(wù)器之間所采用的默認字符集不同,則即使查詢語句相同、在兩次查詢之間記錄與表結(jié)構(gòu)也沒有被更改,系統(tǒng)仍然認為是不同的查詢。對于這一點需要特別的注意,大家比較容易忽視。

二、提高緩存命中率的建議。

  從上面的條件分析中可以看出,利用緩存中的數(shù)據(jù)具有比較嚴格的條件。其實這些條件也是合情合理的。主要是為了保障數(shù)據(jù)的一致性。對以上這些條件有深入的認識之后,現(xiàn)在數(shù)據(jù)庫管理員需要考慮的是,如何來提高這個緩存的命中率?對此筆者有如下幾個建議。

  一是在配置時,客戶端與服務(wù)器端要使用相同的字符集。如果客戶端(或者說第三方工具)與服務(wù)器端使用的字符集不同,那么任何情況下都不會使用緩存功能。特別在國內(nèi),需要用到中文的字符集。此時特別需要注意,客戶端默認字符集要與服務(wù)器端的默認字符集相同。注意,這里是相同,而不是兼容。有時候即使采用了不同的字符集,客戶端上仍然可以正常顯示。這主要是因為有些字符集雖然不相同,但是是相互兼容的。在緩存管理上,需要相同,光兼容還不行。

  二是在客戶端上,要固化查詢的語句。如現(xiàn)在有財務(wù)人員和采購人員同時從系統(tǒng)中查詢11月份的出貨數(shù)據(jù)。顯然他們崗位職責不同,所需要字段的內(nèi)容是不同的。此時在客戶端出,可以允許用戶設(shè)置自己所需要的表單格式。但是筆者建議,后臺所采用的SQL語句最好是相同的。這里數(shù)據(jù)會經(jīng)過三個渠道:后臺數(shù)據(jù)庫、客戶端、用戶。筆者的意識時,后臺數(shù)據(jù)庫與客戶端之間的交互采用相同的SQL語句。然后客戶端與用戶之間進行交互時,根據(jù)用戶定義的格式(包括字段前后的排列、不包括查詢條件語句的差異)向用戶顯示數(shù)據(jù)。此時由于采用了相同的SQL語句(只是用戶對于顯示格式的要求不同),從而可以提高應(yīng)用系統(tǒng)的查詢效率。

  三是提高內(nèi)存中緩存的配置,來提高命中率。一般在服務(wù)器啟動時,操作系統(tǒng)會跟數(shù)據(jù)庫軟件協(xié)商緩存空間的大小。當緩存工作不足時,緩存中最舊的緩存記錄會被最新的消息所覆蓋??梢姡绻軌蛱岣呔彺婵臻g,就可以提高命中率。這就好像打靶,目標多了,命中的幾率也會高許多。不過用戶的并發(fā)數(shù)越多,這個設(shè)置的效果會越不明顯。

  四是通過分區(qū)表可以提高緩存的命中率。在上面的條件分析中,大家可以看到,只要所查詢的表中插入了一條記錄,系統(tǒng)就會清空緩存記錄?,F(xiàn)在以查詢出貨記錄為例。出貨記錄表每天都在更新,而用戶在年初時,會經(jīng)常需要查詢上一年的出貨記錄。此時由于這個表中的數(shù)據(jù)每個小時都在更新,那么緩存中的信息會不斷的被情況。此時緩存的命中率顯然不會很高。針對這種情況,筆者建議可以采用分區(qū)表。如可以通過系統(tǒng)設(shè)置,將2010年的出貨記錄單獨存放在一個出貨的分區(qū)表中。即每一個年度都使用一張單獨的分區(qū)表。此時2011年的紀錄,就不會影響到2010年的分區(qū)表。此時如果用戶重復(fù)查詢2010年的出貨信息,只要其使用的SQL語句相同(沒有采用不同的查詢條件),那么就可以享受緩存機制所帶來的效益,提高應(yīng)用系統(tǒng)的查詢效果。。

三、多個應(yīng)用對緩存的影響。

  通常情況下,MySQL數(shù)據(jù)庫的緩存是根據(jù)服務(wù)器內(nèi)存的大小自動分配的。如果一臺服務(wù)器上只有一個MySQL應(yīng)用,那么固然最好。不過在實際工作中,為了降低信息化投資的成本,往往會在同一臺服務(wù)器上布置多個信息化應(yīng)用。由于其他信息化應(yīng)用也需要使用內(nèi)存的空間作為緩存,那么MySQL數(shù)據(jù)庫中緩存空間就可能變小。如果遇到這種情況下,數(shù)據(jù)庫管理員需要跟系統(tǒng)工程師進行協(xié)商,為各種不同的應(yīng)用根據(jù)性能要求的不同,手工設(shè)置不同的緩存空間。如此的話,就可以避免同一臺服務(wù)器上不同信息化應(yīng)用對緩存的沖突。
 

這些知識對剛?cè)腴T的初學者是很有意義的,上文講到的都是程序員基礎(chǔ),踏踏實實從基礎(chǔ)學起,對以后的發(fā)展是有好處的,很高興能與大家一起分享這些知識,真心的希望能夠幫到大家。

【編輯推薦】

  1. 不使用MySQL數(shù)據(jù)庫的五個給力理由
  2. MySQL數(shù)據(jù)庫引擎快速指導(dǎo)
  3. MySQL數(shù)據(jù)庫的23個特別注意的安全事項
責任編輯:迎迎 來源: it168網(wǎng)站
相關(guān)推薦

2010-05-18 10:34:29

MySQL數(shù)據(jù)庫備份

2011-04-07 12:52:05

Oracle數(shù)據(jù)庫

2020-07-28 07:53:36

MySQL數(shù)據(jù)庫技術(shù)

2011-02-25 15:31:19

MySQL數(shù)據(jù)庫DBA

2016-08-29 23:00:29

大數(shù)據(jù)數(shù)據(jù)分析

2010-05-17 16:10:39

MySQL數(shù)據(jù)庫

2011-04-07 15:02:02

LinuxMySQL數(shù)據(jù)庫

2019-04-25 15:35:37

MySQL數(shù)據(jù)庫運維Linux

2011-03-10 13:19:47

Oracle數(shù)據(jù)庫

2011-03-03 17:56:52

MySQL數(shù)據(jù)庫優(yōu)化

2018-01-31 17:50:33

數(shù)據(jù)庫MySQL優(yōu)化

2009-07-28 14:16:31

ASP.NET與MyS

2011-05-13 09:42:21

2020-12-28 09:36:53

MySQL數(shù)據(jù)庫工具

2021-10-28 19:28:04

數(shù)據(jù)庫開發(fā)Spring

2016-09-18 21:02:47

mysql數(shù)據(jù)庫

2011-03-08 08:49:55

MySQL優(yōu)化單機

2011-02-22 14:26:04

ProFTPD

2020-09-22 15:56:31

Java

2011-02-22 14:26:04

ProFTPD
點贊
收藏

51CTO技術(shù)棧公眾號