Mysql的優化

1.mysql中一共有12個存儲引擎,其中MyISAM 和InnoDB最經常使用mysql

MyISAM 獨立於操做系統,很輕鬆的可以從windows服務器移植到Linux服務器。可是MyISAM不能處理事務。sql

1.選擇密集型的表。MyISAM存儲引擎在篩選大量數據時很是迅速,這是它最突出的優勢。
2.插入密集型的表。MyISAM的併發插入特性容許同時選擇和插入數據。例如:MyISAM存儲引擎很適合管理郵件或Web服務器日誌數據。數據庫

寫的速度快windows

InnoDB緩存

InnoDB是一個健壯的事務型存儲引擎,這種存儲引擎已經被不少互聯網公司使用,爲用戶操做很是大的數據存儲提供了一個強大的解決方案。服務器

1.更新密集的表。InnoDB存儲引擎特別適合處理多重併發的更新請求。
2.事務。InnoDB存儲引擎是支持事務的標準MySQL存儲引擎。
3.自動災難恢復。與其它存儲引擎不一樣,InnoDB表可以自動從災難中恢復。
4.外鍵約束。MySQL支持外鍵的存儲引擎只有InnoDB。
5.支持自動增長列AUTO_INCREMENT屬性。網絡

通常來講,若是須要事務支持,而且有較高的併發讀取頻率,InnoDB是不錯的選擇。併發

讀的速度快性能

MEMORY優化

使用MySQL Memory存儲引擎的出發點是速度。爲獲得最快的響應時間,採用的邏輯存儲介質是系統內存。雖然在內存中存儲表數據確實會提供很高的性能,但當mysqld守護進程崩潰時,全部的Memory數據都會丟失。得到速度的同時也帶來了一些缺陷。它要求存儲在Memory數據表裏的數據使用的是長度不變的格式,這意味着不能使用BLOB和TEXT這樣的長度可變的數據類型,VARCHAR是一種長度可變的類型,但由於它在MySQL內部當作長度固定不變的CHAR類型,因此可使用。

通常在如下幾種狀況下使用Memory存儲引擎:

1.目標數據較小,並且被很是頻繁地訪問。在內存中存放數據,因此會形成內存的使用,能夠經過參數max_heap_table_size控制Memory表的大小,設置此參數,就能夠限制Memory表的最大大小。

2.若是數據是臨時的,並且要求必須當即可用,那麼就能夠存放在內存表中。

3.存儲在Memory表中的數據若是忽然丟失,不會對應用服務產生實質的負面影響。

Memory同時支持散列索引和B樹索引。B樹索引的優於散列索引的是,可使用部分查詢和通配查詢,也可使用<、>和>=等操做符方便數據挖掘。散列索引進行「相等比較」很是快,可是對「範圍比較」的速度就慢多了,所以散列索引值適合使用在=和<>的操做符中,不適合在<或>操做符中,也一樣不適合用在order by子句中。

 

/****************************************************************/

2.優化查詢語句:

mysql中也有一個緩存 基於hash表 鍵值對存儲。

查詢緩存不開啓
$sql - "select username from user where signup_date >= curdate()"//curedate()當前時間

// 開啓查詢緩存
$today = date("Y-m-d");
$sql="SELECT username FROM user WHERE signup_date >= '$today'");

3.使用LIMIT 1

在相似於用戶名的時候能夠加上limit 1 以提升查詢速度

4.爲搜索字段創建索引

5..避免SELECT *從數據庫裏讀出越多的數據,那麼查詢就會變得越慢。而且,若是你的數據庫服務器和WEB服務器是兩臺獨立的服務器的話,這還會增長網絡傳輸的負載。

6.爲每張表設置一個id

7.char和varchar()合理使用

8.儘量的使用not null

9.垂直分割大表成幾個小表

10.避免使用子查詢,應該使用join查詢

一、內鏈接:將兩個表中存在連結關係的字段符合鏈接條件的記錄造成記錄集

Select A.name,B.name from A inner join B on A.id=B.id和

Select A.name,B.name from A,B where A.id=B.id結果是同樣的(內鏈接的inner關鍵字可省略);

 

二、外鏈接:分爲左外鏈接和右外鏈接

左鏈接A、B表結果包括A的所有記錄和符合條件的B的記錄。

右聯結A、B表的結果和左聯結B、A的結果是同樣的,也就是說:

Select A.name,B.name from A Left Join B on A.id=B.id和

Select A.name,B.name from B Right Join A on B.id-A.id執行後的結果是同樣的。

三、全聯結

四、無聯結

五、三表聯結查詢

select username,psw,gname,tel from (t1 left join t2 on t1.t1_id=t2.t1_id) left join t3 on t1.t1_id=t3.t1_id

相關文章
相關標籤/搜索