mysql效能優化 應對大量資料訪問以及效能提身

2021-07-31 00:01:05 字數 2737 閱讀 3404

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...