Mysql常見的優化策略
數據庫設計方面優化
1、數據庫設計符合第三範式,為了查詢方便可以有一定的數據冗余。
2、選擇數據類型優先級 int > date,time > enum,char>varchar > blob,選擇數據類型時,可以考慮替換,如ip地址可以用ip2long()函數轉換為unsign int型來進行存儲。
3、對於char(n)類型,在數據完整的情況下盡量較小的的n值。
4、在建表時用partition命令對單個表分區可以大大提升查詢效率,MySQL支持RANGE,LIST,HASH,KEY分區類型,其中以RANGE最為常用,分區方式為:
CREATE TABLE tablename{
}ENGINE innodb/myisam CHARSET utf8 //選擇數據庫引擎和編碼
PARTITION BY RANGE/LIST(column),//按範圍和預定義列表進行分區
PARTITION partname VALUES LESS THAN /IN(n),//命名分區並詳細限定分區的範圍
5、選擇數據庫引擎時要註意innodb 和 myisam的區別。
存儲結構:MyISAM在磁盤上存儲成三個文件。而InnoDB所有的表都保存在同一個數據文件中,一般為2GB
事務支持:MyISAM不提供事務支持。InnoDB提供事務支持事務。
表鎖差異:MyISAM只支持表級鎖。InnoDB支持事務和行級鎖。
全文索引:MyISAM支持 FULLTEXT類型的全文索引(不適用中文,所以要用sphinx全文索引引擎)。InnoDB不支持。
表的具體行數:MyISAM保存有表的總行數,查詢count(*)很快。InnoDB沒有保存表的總行數,需要重新計算。
外鍵:MyISAM不支持。InnoDB支持
Mysql常見的優化策略