標籤:
資料庫物件最佳化
1、最佳化表的資料類型
- 使用procedure analyse()對當前應用的表進行分析,該函數可以對資料表中的列的資料類型提出最佳化建議。select * from tb1_name procedure analyse();
2、通過拆分提高表的訪問效率--分庫分表
- 垂直分割:把主碼和一些列放到一個表,然後把主碼和另外的列放到另一個表中
- 水平分割:根據一列或多列資料的值把資料行放在兩個獨立的表中。
3、逆正常化
4、使用中間表提高統計查詢速度
5、表維護
1)找到並修複損壞的表
2)更新索引統計資訊
3)減少索引和資料的片段
- 分析表:analyze table sales;
- 檢查表:check table sales;
- 最佳化表:optimize table sales;
分庫分表
1、分庫分表策略演化
1)單庫單表:最常見的資料庫設計,例如,有一張使用者表放在資料庫db中,所有使用者都可以在db庫中的use表中查到
2)單庫多表:隨著使用者數量的增加,user表的資料量越來越大,當資料量達到一定程度的時候對user表的查詢會逐漸的變慢,從而影響整個db的效能,如果使用mysql,還有一個更嚴重的問題是,當需要添加一列的時候,mysql會鎖表,期間所有的讀寫操作只能等待。可以通過某種方式將user進行拆表,產生兩個表結構完全一樣的user_0000、user_0001等表,user_0000+user_0001+...的資料剛好是一份完整的資料。
3)多庫多表:隨著資料量增加,也行單台db的儲存空間不夠,隨著查詢量的增加,單台資料庫伺服器已經沒辦法支撐,這時候可以再對資料庫進行拆分。
2、分庫分表規則
1)按號段分:user_id區分,1~1000的對應db1,1001~2000的對應db2,以此類推
2)hash模數分:對user_id進行hash(或者user_id是數值型的話可以直接使用user_id的值),然後用一個特定的數字,比如應用中需要將一個資料庫切分為4個資料庫的話,就用4這個數字對user_id的hash值進行模數運算,也就是user_id%4。
3)在認證庫中儲存資料庫配置:就是建立一個db,這個db單獨儲存user_id到db的映射關係,每次訪問資料庫的時候都要查詢一次這個資料庫,以得到具體的db資訊,然後才能進行我們需要的查詢操作。
mysql資料庫效能最佳化 - 表最佳化