資料庫 效能優化

2021-09-26 06:16:34 字數 2297 閱讀 8428

// 查詢快取不開啟
$r = mysql_query("select username from user where signup_date >= curdate()");
// 開啟查詢快取
$today = date("y-m-d");
$r = mysql_query("select username from user where signup_date >= '$today'");
像 now() 和 rand() 或是其它的諸如此類的sql函式都不會開啟查詢快取,因為這些函式的返回是會不定的易變的。所以,你所需要的就是用乙個變數來代替mysql的函式,從而開啟快取。

當你查詢表的有些時候,你已經知道結果只會有一條結果,但因為你可能需要去fetch游標,或是你也許會去檢查返回的記錄數。

下面的示例,只是為了找一下是否有「中國」的使用者,很明顯,後面的會比前面的更有效率。(請注意,第一條中是select *,第二條是select 1)

// 沒有效率的:
$r = mysql_query("select * from user where country = 'china'");
if (mysql_num_rows($r) > 0)
// 有效率的:
$r = mysql_query("select 1 from user where country = 'china' limit 1");
if (mysql_num_rows($r) > 0)
如果在表中某個字段需要經常搜尋,那麼需要建立索引

如果應用中有好多join,應該確認兩個表是被建立過索引

// 在state中查詢company
$r = mysql_query("select company_name from users
left join companies on (users.state = companies.state)
where users.id = $user_id");
// 兩個 state 字段應該是被建過索引的,而且應該是相當的型別,相同的字符集。
// 不推薦
$r = mysql_query("select * from user where user_id = 1");
$d = mysql_fetch_assoc($r);
echo "welcome ";
// 推薦
$r = mysql_query("select username from user where user_id = 1");
$d = mysql_fetch_assoc($r);
echo "welcome ";
資料庫中每張表都要設計乙個id為主鍵,而且最好是乙個int型別的,並設定auto_increment

varchar 作為主鍵會降低效能, 集群,分割槽等操作會用到主鍵

enum 是非常快和緊湊的,實際上儲存的是tinyint

如果表中的長度都是固定的,整個表會認為是靜態表(沒有varchar, text, blob),這樣這個搜尋引擎會用另外一種方法處理

因為這些固定的長度是很容易計算下乙個資料的偏移量的,所以讀取的自然也會很快。而如果字段不是定長的,那麼,每一次要找下一條的話,需要程式找到主鍵。

垂直分割是把一種資料庫中的表分成幾張表,這樣可以降低表的複雜度和字段數目

示例一:在users表中有乙個欄位是家庭位址,這個欄位是可選字段,相比起,而且你在資料庫操作的時候除了個人資訊外,你並不需要經常讀取或是改寫這個字段。那麼,為什麼不把他放到另外一張表中呢? 這樣會讓你的表有更好的效能,大家想想是不是,大量的時候,我對於使用者表來說,只有使用者id,使用者名稱,口令,使用者角色等會被經常使用。小一點的表總是會有好的效能。

示例二: 你有乙個叫 「last_login」 的字段,它會在每次使用者登入時被更新。但是,每次更新時會導致該錶的查詢快取被清空。所以,你可以把這個字段放到另乙個表中,這樣就不會影響你對使用者id,使用者名稱,使用者角色的不停地讀取了,因為查詢快取會幫你增加很多效能。

如果需要執行大量的delete 和 insert 需要拆分, 因為這些操作會鎖表

拆分:

while (1)
// 每次都要休息一會兒
usleep(50000);
}
12. 越小越快

對於大多數引擎來說,硬碟是瓶頸,所以需要把資料變得緊湊

資料庫效能優化

資料庫設計 實現sql server資料庫的優化,首先要有乙個好的資料庫設計方案。在實際工作中,許多sql server方案往往是由於資料庫設計得不好導致效能很差。實現良好的資料庫設計必須考慮這些問題 1.邏輯資料庫規範化問題 一般來說,邏輯資料庫設計會滿足規範化的前3級標準 第1規範 沒有重複的組...

資料庫效能優化

1 系統設計 1 縱向 橫向分割表,減少表的尺寸 縱向 欄位多。按業務主題分割。根據頁大小。橫向 資料多。按條件分割表。eg 按年儲存表,歷史資料表和當期資料更新表。2 將資料處理交給db,編寫儲存過程 1 減少網路的開銷 2 儲存過程是編譯 優化過,速度快。3 唯讀查詢操作優化方法 1 資料量小的...

資料庫效能優化

最近要寫一些關於企業級應用的優化內容的東西,就先從資料庫優化入手吧,在這裡先記錄一下。作為一名有資料庫教育背景的工作人員,我著重從db的角度介紹一下,我認為的db優化方式。首先,撇開經濟商業用處不談,db效能優化的原則主要是,通過盡可能少的磁碟訪問獲得所需的資料。一般而言,資料的是優化可以從三方面分...