1、PDO
PDO就是一個接口,可以讓PHP和各種數(shù)據(jù)庫進(jìn)行交互。雖然PDO支持預(yù)處理和數(shù)據(jù)綁定,但是由于查詢效率低,所以筆者不推薦使用
2、數(shù)據(jù)庫的優(yōu)化????
? ? 基本語句優(yōu)化原則????
? ? ? ? 1、盡量避免在列上進(jìn)行運(yùn)算,
? ? ? ? ? ? eg:select * from t where YEAR(d)>=2011? ?優(yōu)化為? select * from t where d >= '2011-01-01';
? ? ? ? 2、使用JOIN連接時,盡量使用小結(jié)果集驅(qū)動大結(jié)果集(根據(jù)實際需要可以調(diào)整)
? ? ? ? 3、注意LIKE的模糊操作的使用,避免%%
? ? ? ? eg:? select * from where name like ‘%de%’? ?優(yōu)化為? select * from where name>='de'? and name <'df'
? ? ? ? 4、列出需要的字段? ?主要是節(jié)約內(nèi)存
? ? ? ? 5、使用批量插入? 節(jié)省交互
? ? ? ? 6、limit的基數(shù)比較大的時候,使用between,在取比較后面的數(shù)據(jù)時候,使用desc把數(shù)據(jù)反向查找,減少對數(shù)據(jù)的掃描
? ? ? ? 7、不用適用rand函數(shù)獲取多條記錄
? ? ? ? 8、避免使用NULL
? ? ? ? ?9、不要使用count(id),而應(yīng)該吃用count(*)?這是為什么
? ? ? ? 10、不要做無所謂的排序操作。
5.2.2????索引與性能分析
? ? MyISAM注重性能,InnoDB注重事物--------------------------這句話是錯的
? ? 1、選擇存儲引擎
? ? ? ? (1)采用MyISAM引擎
? ? ? ? ? ? ? ? R/W > 100 : 1且update相對較少
? ? ? ? ? ? ? ? ?并發(fā)不高,不需要事務(wù)
? ? ? ? ? ? ? ? ? 表數(shù)據(jù)量小
? ? ? ? ? ? ? ? 硬件資源有限
? ? ? ? ?(2)采用InnoDB引擎
? ? ? ? ? ? ? ? R/W比較小,且頻繁更新大字段
? ? ? ? ? ? ? ? ?表數(shù)據(jù)量超過1000萬,并發(fā)高
? ? ? ? ? ? ? ? ? ?安全性和可用性要求高
? ? ? ? ? ?(3)采用Momory引擎
? ? ? ? ? ? ? ? 有足夠的內(nèi)存
? ? ? ? ? ? ? ? ? ?需要定期歸檔的數(shù)據(jù)? ? ?對數(shù)據(jù)一致性要求不高
? ? ? ? 2、MySQl服務(wù)器調(diào)整優(yōu)化措施
? ? ? ? ? ? ? 1)關(guān)閉不必要的二進(jìn)制日志和慢查詢?nèi)罩?/p>
? ? ? ? ? ? ? 2)適度使用Query Cache
? ? ? ? ? ? ? ? 3)增加mysql的最大連接數(shù)
? ? ? ? ? ? 4)從表中刪除大量的數(shù)據(jù)后,使用OPTIMIZE? ?TABLE TableName
? ? 5.3
? ? ? ? 5.3.1? ? 范式與反范式:現(xiàn)在硬盤的存儲條件是允許犧牲物理內(nèi)存來換取查詢時間的。
? ? ? ? 5.3.2? ? 數(shù)據(jù)庫分區(qū):把數(shù)據(jù)表的文件和索引分散存儲在不同的個物理文件中,對于數(shù)據(jù)量超過百萬的數(shù)據(jù),盡量使用數(shù)據(jù)庫分區(qū),可以提高效率的。對于分區(qū),通常使用RANGE類型(在實際開發(fā)中還沒有試過)
? ? ? ? 5.3.3? ? ? ?數(shù)據(jù)庫分表:分表是把一個表分成幾個表,進(jìn)行分表查詢時候,可以用union或者做一個視圖。數(shù)據(jù)庫分表分為:水平分表和垂直分表。(在實際開發(fā)中還沒有試過)