mysql效能優化的其他一些總結:
1,在join表的時候使用相當的列,將其索引
如果你的應用程式,有很多join查詢,應該確認兩個表中的join欄位是被建立過索引的,
這樣mysql內部會啟動優化join的語句。這些被用來join的字段,應該是型別相同。
例如:如果你要把 decimal 型別欄位和乙個 int 型別欄位join在一起,mysql就無法使用它們的索引。對於那些string型別,還需要有相同的字符集才行。(兩個表的字符集有可能不一樣)
// 在state中查詢company
$r = mysql_query("select company_name from users
left join companies on (users.state = companies.state)
where users.id = $user_id");
// 兩個 state 字段應該是被建過索引的,而且應該是相當的型別,相同的字符集。
2,千萬不能使用 order by rand() ——-mysql內部有rand() 這個函式,(消耗cpu)
rnad()使得mysql要每一行記錄去記行,
例:
//禁止這樣
mysql_query(select * from table order by rand() limit 1 );
//應該使用這樣優化方法
$count = mysql_query( select count(*) from table );
$d = mysql_fetch_row($count);
$rand = mt_rand( 0,$d-1 );
$res = mysql_query( select username from table limit $rand,1 );
3,永遠為每張表設定乙個id.
在這裡,只有乙個情況是例外,那就是「關聯表」的「外來鍵」,也就是說,這個表的主鍵,通過若干個別的表的主鍵構成。我們把這個情況叫做「外來鍵」。
4,使用enum而不是varchar
enum是非常快和緊湊的
5,prepared statement
是一種執行在後台的sql語句集合,可以從prepare statement獲取效能以及安全的好處。
prepare statement是以繫結引數的sql,可以防止sql注入的風險。
//建立prepared
$statement = $mysqli -> prepare( "select username from user where state=?" );
//繫結引數
$statement -> bind_param( 「s」 , $state);
//執行
$statement -> execute();
// 繫結結果
$stmt->bind_result($username);
// 移動游標
$stmt->fetch();
printf("%s is from %s
", $username, $state);
$stmt->close();
6, ip位址存成 unsigned int
如果使用unsigned int 整形存放,只需要4個位元組,並且可以有定長的字段。
在查詢中可以使用 inet_aton() 將乙個字串的ip轉成整形,
同樣使用inet_ntoa() 將整形轉成字串型ip; 在php中也有同樣的函式 : ip2long() long2ip()
$res = mysql_query(update table set ip = inet_aton(『』)) where id=$userid;
7,垂直分割
定義:把一張表分割成幾張表,這樣可以降低表的複雜度和字段數目;
示例二: 你有乙個叫 「last_login」 的字段,它會在每次使用者登入時被更新。但是,每次更新時會導致該錶的查詢快取被清空。所以,你可以把這個字段放到另乙個表中,這樣就不會影響你對使用者id,使用者名稱,使用者角色的不停地讀取了,因為查詢快取會幫你增加很多效能。
另外,你需要注意的是
,這些被分出去的字段所形成的表,你不會經常性地去join他們
,不然的話,
這樣的效能會比不分割時還要差,而且,會是極數級的下降。
8,拆分大的 delete 或 insert 語句
apache 會有很多的子程序或執行緒。所以,其工作起來相當有效率,而我們的伺服器也不希望有太多的子程序,執行緒和資料庫鏈結,這是極大的佔伺服器資源的事情,尤其是記憶體。
如果你把你的表鎖上一段時間,比如30秒鐘,那麼對於乙個有很高訪問量的站點來說,這30秒所積累的訪問程序/執行緒,資料庫鏈結,開啟的檔案數,可能不僅僅會讓你泊web服務crash,還可能會讓你的整台伺服器馬上掛了。
while (1)
// 每次都要休息一會兒
usleep(50000); }
mysql效能優化 mysql效能優化
優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...
mysql插入大量資料,時間的優化。
背景 業務場景假設,公司原有excel記錄了千萬級客戶的相關資料,公司業務結構實現了資訊化的布局,需要在新開發的crm系統中匯入千萬級的客戶資料。此時需要用到mysql的insert操作來插入使用者的海量資料。普通情況下,會使用for迴圈一條一條的插入資料。假設客戶的資料量為10萬條資料。conne...
mysql的效能優化 mysql效能優化
檢視安裝指令碼 select version 非互動式超時時間,如jdbc show global variables like wait timeout 互動式超時時間,如資料庫工具 show global variables like interactive timeout show sessi...