Mysql存儲引擎 選擇合適的存儲引擎Innodb myisam myisam: 寫入數據非常快,適合使用場合dedecms/phpcms/discuz/微博系統等寫入、讀取操作多的系統。 innodb: 適合業務邏輯比較強的系統,修改操作較多的,例如ecshop、crm、辦公系統、商城系統。mys ...
Mysql存儲引擎
選擇合適的存儲引擎Innodb myisam
myisam: 寫入數據非常快,適合使用場合dedecms/phpcms/discuz/微博系統等寫入、讀取操作多的系統。
innodb: 適合業務邏輯比較強的系統,修改操作較多的,例如ecshop、crm、辦公系統、商城系統。mysql5.5以上預設的存儲引擎
mysql索引
添加索引
1.添加PRIMARY KEY(主鍵索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` )
3.添加INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.添加複合索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
刪除索引
查看索引
創建索引註意事項
執行計劃
主要用於分析sql語句的執行情況(並不執行sql語句)得到sql語句是否使用了索引,使用了哪些索引。
語法:explain sql語句\G 或 desc sql語句\G
首碼索引
通過欄位前n位創建的索引就稱為“首碼索引”。
如果一個欄位內容的前邊的n位信息已經足夠標識當前的欄位內容,就可以把欄位的前n位獲得出來並創建索引,該索引占據空間更小、運行速度更快
語法:alter table 表名 add key/index (欄位(前n位位數))
查詢緩存
mysql伺服器提供的,用於緩存select語句結果的一種內部記憶體緩存系統。
如果開啟了查詢緩存,將所有的查詢結果,都緩存起來,使用同樣的select語句,再次查詢時,直接返回緩存的結果即可
開啟緩存
> show variables like ‘query_cache%’; //查看緩存使用情況
query_cache_size:緩存空間大小
query_cache_type:是否有開啟緩存
query_cache_type = 1
query_cache_size = 134217728
註:在my.ini中開啟
緩存失效
數據表的數據(數據有修改)有變化 或者 數據表結構(欄位的增、減)有變化,則會清空全部的緩存數據,即緩存失效。
禁用緩存
sql_no_cache 不進行緩存
select sql_no_cache * from emp where empno=123456;
查看緩存使用情況
> show status like ‘Qcache%’; //查看緩存使用情況
分區技術
List分區
list :條件值為一個數據區。根據“欄位的內容值”是否在某個“區域”中進行分區
查詢:explain partitions select * from p_list where store_id=20\G
關鍵:在使用分區時,where後面的欄位必須是分區欄位,才能使用到分區。
不使用分區欄位的結果:
語法:
create table p_list(
id int,
name varchar(32),
store_id int
)engine myisam charset utf8
partition by list (store_id)(
partition p_north values in (1,4,5,6,17,18),
partition p_east values in(2,7,9,10,11,13),
partition p_south values in(3,12,19,20),
partition p_west values in(8,14,15,16)
);
Range分區
Hash分區
Key分區
刪除分區
① 在key/hash領域不會造成數據丟失(刪除分區後數據會重新整合到剩餘的分區去)
② 在range/list領域會造成數據丟失
2)刪除list類型分表(數據有對應丟失)
alter table p_list drop partition p_north;
註:分區里包含的數據也被刪除
增加分區
求餘方式: key/hash
> alter table 表名 add partition partitions 數量;
範圍方式: range/list
> alter table 表名 add partition(
partition 名稱 values less than (常量)
或
partition 名稱 in (n,n,n)
);
註意:創建分區的欄位必須是主鍵(唯一)或主鍵(唯一)的一部分
前端優化
頁面靜態化
真靜態(ob緩存) 使用PHP文件讀寫功能與ob緩存機制生成靜態頁面
偽靜態(重寫機制)
減少http請求
啟用壓縮(apache配置) 精靈圖
Js代碼混編
後端優化
表設計:
表設計符合三範式
選擇合適的欄位,設為not null,用varchar代替char
使用外鍵
建立索引,加快查詢的速度
選擇合適的存儲引擎
查詢優化:
使用連表查詢 少使用Like通配符和select *
事務處理 避免大事務操作,提高系統併發能力
資料庫讀寫分離 負載均衡