mysql 優化

 

逆範式:1對多的時候應當儘量的把冗餘放在一那邊

#查看語句的執行次數
show status 

show create database;

#設置id自動增加的值
alter table test auto_increment=2;

#mysql myisam 引擎刪除的記錄不是釋放硬盤空間
optimize table table_name;

關心以com開頭的命令 show status like 'com%'

show (session) status like 'com_select';  //本次會話

show global status like 'com_select';  //從啓動到如今

connextions 試圖鏈接數據庫的次數   status like 'com_select';

show status like 'uptime';  服務器啓動時間

show status like 'slow_queries';  //慢查詢次數,默認是十秒

顯示慢查詢 show variables like 'long_query_time';設置

關於mysql中的 dual 表能夠看錯是一個虛擬表,只是爲符合 select * from table_name 這一查詢格式而已

啓動慢查詢日誌:
mysqld.exe -slow-query-log

數據文件my.ini datadir設置

//設置慢查詢時間
set long_query_time = 1;
__________________________________________________
第一步:修改my.ini(mysql配置文件)
  在my.ini中加上下面兩句話
  log-slow-queries = D:\wamp\mysql_slow_query.log
  long_query_time=5
  第一句使用來定義慢查詢日誌的路徑(由於是windows,因此不牽涉權限問題)
  第二句使用來定義查過多少秒的查詢算是慢查詢,我這裏定義的是5秒
  第二步:查看關於慢查詢的狀態
  執行以下SQL語句來查看mysql慢查詢的狀態
  show variables like '%slow%';
  執行結果會把是否開啓慢查詢、慢查詢的秒數、慢查詢日誌等信息打印在屏幕上。
  第三步:執行一次慢查詢操做
  
  下語句代替:
  SELECT SLEEP(10);
  第四步:查看慢查詢的數量
  經過以下sql語句,來查看一共執行過幾回慢查詢:
  show global status like '%slow%';

explain:分析會不會用到索引,但不能分析出用多少時間

導入大量數據時:
alter table table_name     disable keys;
loading data;
alter table table_name     enable keys;

查看見表SQL:
show create table table_name;

對於 myisam數據庫,須要定時清理

optimize table 表名

用鏈接代替子查詢
使用join,mysql不須要在內存中國年建立臨時表

若是想要 or 用到索引則,or的條件必須都加索引


在精度要求較高的項目中,用定點數來來保存,以保證準確性
所有用 decimal 更準確

date 函數最多 2038 年  此時的時間戳正好爲 int 有符號的最大值

查看索引的使用狀況
show status like 'handler_read';

handler_read_key:  高了好
handler_read_rnd_next: 低了好


字段的類型匹配不一致可能會用不到索引:
    字符串型字段 = 123  用不到索引
    字符串型字段 = "123"  能夠用索引

 

關於索引mysql

 

1,在建立一個n列的索引時,實際是建立了MySQL可利用的n個索引。
多列索引可起幾個索引的做用,由於可利用索引中最左邊的列集來匹配行。
 KEY `gb_index_FUid_FCityId_FStatus` (`FUid`,`FCityId`,`FStatus`)
可利用多個索引:
FUid
(FUid, FCityId)
(FUid,FCityId,FStatus)

2,對字符串創建索引後,查詢時必定要加引號,不然不能使用索引。

3,mysql對於索引的順序是有優化的
Where FUid = xxx and FCityId = yyy
和
Where FCityId = yyy and FUid = xxx
Mysql都會使用索引(FUid, FCityId)

4,join on的列加索引,效果很好。

5,in查詢中,若是值太多,能夠考慮換一種實現方式。

6,對於merg表,若是有join查詢,能夠將merge表的join查詢替換成多個子表的join查詢,最後union結果。(原來搜索腳本就是這樣進行優化的)。
相關文章
相關標籤/搜索