(1) mysql 應該至少知足3NFmysql
(2)sql語句一共有四類sql
ddl(數據定義語言):create,alter,drop數據庫
dml(數據操做語言):insert,delete,updatesession
dtl(數據事務語言):commit,rollback,savepoint函數
dcl(數據控制語言):grant,revoke工具
(3) show status : 顯示你的mysql數據庫當前狀態優化
(4) show status like 'Com%' <=> show session status like 'Com%' 顯示當前控制檯狀況日誌
show global status like 'Com%' 顯示當前數據庫從啓動到如今的執行次數排序
connections:鏈接mysql次數 show status like 'Connections'索引
uptime:啓動時間 show status like 'uptime'
slow_queries: 顯示慢查詢時間(默認10s)
(5)查看慢查詢的時間
show variables like 'long_query_time'
(6)delimiter $$ 定義新的命令結束符號
mysql 自定義語句:create function xxx()
mysql 刪除自定義函數:drop function xxx()
(7)如何在一個項目中,找到慢查詢select,mysql支持把慢查詢語句記錄到日誌中(默認狀況不啓用)
(一) .frm 表結構 (二)*.myd 數據 (三)*.myi索引
添加主鍵索引 eg:alter table emp add primary key(empno) 代價:索引空間變大
刪除主鍵索引 eg:alter table emp drop peimary key
索引:加快查詢速度,可是犧牲dml語句速度 索引信息存在*.myi文件中
(8) explain分析工具對sql語句進行分析,能夠預測sql執行效率,加了索引不進行全表掃描
possible_key:可能用到的索引
key:實際索引
row:從....行得出的(檢索n條記錄取出的)
extra:查詢細節信息
(9)在什麼列上加索引比較合適
(一)較頻繁的查詢條件應該建立索引
(二) 惟一性太差字段不適合加索引
(三) 內容常常變化,不適合加索引
(10) 索引的種類
主索引:主鍵自動爲主索引(primary)把某列設爲主鍵
惟一索引:unique[即改列具備惟一性,又是索引]
全文索引:只有myisam指出fulltext
index:普通索引
符合索引:create index xx on 表名 (列1,列2)
(11)如何建立索引
1,unqiue/fulltext
create [unique][fulltext] index 索引名 on 表名 (列名)
alter table xxx add index 索引名 列名
若是添加主鍵索引 create table add primary key (列名)
刪除索引
1,drop index 索引名 on 表名
2,alter table 表名 drop index 索引名
alter table 表名 drop primary key
(12) 索引的使用
1,對於建立多列索引,只要查詢條件使用了最左邊的列,索引就會被使用
2,對於使用like 查詢,若是是'%aaa' 不會使用索引,'aaa%' 會使用索引
(13)下列條件不會使用索引
1,若是條件有or,即便其中有條件呆索引也不會使用
2,對於多列索引,不是使用第一部分,則不會使用索引
3,若是列類型爲字符串,那必定要在條件中將數據使用用引號引發來,不然不會使用索引
4,like 查詢以%開頭
5,若是mysql 使用全表掃描比使用索引快,則不需建立索引
(14) 查看索引使用狀況
show status like 'Handle_read%'
1, handle_read_key:索引查詢次數,這個值越高越好
2,handle_read_rnd_next:這個值越高查詢越低效
(15)myisam和innodb區別
1,myisam 不支持外鍵,innodb支持
2,myisam 不支持事務
3,對於數據信息存儲的處理方式不一樣(若是存儲引擎是myisam,則建立一張表,對於三個文件。若是innodb則只有一個文件,*,frm數據存放在idata裏)
4,對於myisam 數據庫須要定時清理,optimize table
(16) 常見的mysql 優化方法
1,使用oreder by null 禁止排序(不須要排序的時候)
2,在精度要求高的應用中使用定點數,decimal
3,日期類型,知足應用最小存貯的早期類型