MySQL高級優化

第一部分 前端

1.查看文件的大小:ll -h
  
2.實時監控一條命令的執行結果:watch -n1 ls -lhmysql

  alt+f1---alt+f6:分別切換到linux的6個終端;linux

3.改變語句終結符:\d //sql

4.獨佔表才能作成數據表分區;
  修改mysql配置文件,設置爲innodb獨佔表空間:
  innodb_file|_per_table=1;//默認是沒有這一項的。數據庫

 


第二部分:mysql經常使用操做後端

1.複製表結構:create table t2 like t1;服務器

2.複製表數據:insert into t2  select * from t1;
  注:這樣有可能會出錯,最好代表字段;只有在兩個表的結構徹底同樣的狀況下,纔會成功。socket

3.建立索引(mysql索引分爲三種:普通索引、UNIQUE索引、PRIMARY KEY索引):
  ALTER TABLE table_name ADD INDEX index_name(column_list);
  ALTER TABLE table_name ADD UNIQUE(columu_list);
  ALTER TABLE table_name ADD PRIMARY KEY(column_list);
  注意:也可使用create建立所用,可是create不能用於主鍵索引,通用性沒有alter好;tcp

4.查看索引:show index from t1;函數

5.刪除索引:DROP INDEX index_name ON table_name
         或者:ALTER TABLE table_name DROP INDEX index_name
         或者:ALTER TABLE table_name DROP PRIMARY KEY

6.建立視圖(視圖:從原表中讀取的數據造成的中間表):
  create view v_t1 as select * from t1 where id>5 and id<10;

7.顯示視圖幫助:? view

8.查看視圖:show tables;

9.刪除視圖:drop view v_t1;

10.重排auto_incremnet的值:truncate table tablename 或者  alter table tablename auto_increment=1;

 


第三部分:mysql內置函數

1.字符串函數:
  CONCAT(string2 [,...]) //鏈接字符串
  LCASE(string)   //轉換成小寫
  UCASE(string)   //轉換成大寫
  LENGTH(string)  //string長度
  LTRIM(string)   //去掉前端空格
  RTRIM(string)   //去掉後端空格
  REPEAT(string,count)  //重複count次
  REPLACE(str,search_str,replace_str) //在str中用replace_str替換search_str
  SUBSTRING(str,position[,length]) //在str的position開始,取length個字符
  SPACE(count)  //生成count個空格

2.數學函數
  BIN(decimal_numeber)   //十進制轉二進制
  CEILING(number)        //向上取整
  FLOOR(number)          //向下取整
  MAX(col)               //取最大值,聚合的時候使用
  MIN(col)               //取最小數,聚合的時候使用
  SQRT(number)           //開平方
  RAND()                 //返回0-1內的隨機數

3.日期時間函數
  NOW()                  //當前日期和時間
  CURDATE()              //當前日期 
  CURTIME()              //當前時間
  UNIX _TIMESTAMP(date)   //返回當前data的unix的時間戳
  FROM_UNIXTIME()        //返回UNIX時間戳的日期值
  WEEK(date)             //返回日期date爲一年中的第幾周
  YEAR(date)             //返回如期date中的年份
  DATEDIFF(starttime,endtime)     //返回開始時間金和結束時間間隔的天數


第四部分:mysql預處理(待補充)
  


第五部分:事務處理(MyISAM不支持事務,InnoDB才支持)(待補充)

 

第六部分:存儲(待補充)

 

第七部分:觸發器(當修改了一張表的數據的時候,同時也修改了另一張的數據)(待補充)

 

第八部分:補充
1.外鍵:一張表中的外鍵是另外一張表的主鍵;
  注:Innodb類型的表支持外鍵,MyISAM類型的表不支持外鍵,雖然能夠建立成功,可是不起做用。

2.運行狀態查詢

  a.只針對mysql
  show status; //所有狀態
  show status like "com_select%"; //查詢次數
  show status like "com_insert%"; //插入次數

  b.只針對InnoDB引擎的
  show status like "InnoDB_rows%" //查詢全部的
  show status like "InnoDB_rows_read"
  show status like "InnoDB_rows_updated"
  show status like "InnoDB_rows_inserted"
  show status like "InnoDB_rows_deleted"

  c.其它
  show status like "conections";//連接mysql的數量
  show status like "Uptime";//服務器已經工做的描述
  show status like "Slow_queries";//慢查詢的次數(須要在配置中先開啓,
  查看慢查詢相關配置:show variables like "%long%";  )
  
  經過慢查詢日誌來查看那些語句執行的比較慢!!!!


第九部分:索引優化
  使用語句:explain、desc
  注意點:影響的行數決定了查詢的時間!
  
  1.索引的使用:
  a.對於建立了多個索引,只要查詢條件用到了最左邊的列(第一個索引字段),索引就會被用到;反之,        若是沒有用到第一個列,索引就不會用到。
  b.使用like查詢,後面若是是常量而且只有%號不在第一個字符,索引才能被用到。
  c.若是對於大的文本文件進行搜索,使用全文索引而不使用like"%...%";
  d.若是列名是索引,使用column is null將使用到索引,使用column is not null則不會使用到索引;
  e.使用or查詢的時候,or前面和後面的兩個字段必須都加上索引,不然索引用不上;
     and查詢則只須要一個字段添加索引就會用到索引;
  f.where條件對應的字段類型不對,也會用不上索引(如:做爲條件的字段是varchar類型,並添加了索          引,但查詢的時候字段卻使用的是int類型,此時查詢的時候,mysql會放棄使用索引);

  2.在某些狀況下,mysql不使用索引會比使用索引搜索更快(不多,mysql本身會判斷)

  3.查看索引的使用狀況
    使用命令:show status like 'Handler_read%'
    結果:
    Handler_read_key:表明了一個行被索引讀的次數;若是索引正常工做,它的值會很高;
    Handler_read_rnd_next:若是他的值很高,則意味着查詢運行低效,應該創建索引補救。


第十部分:表優化
    1.檢查表:check table tablename;
    2.優化表:optimize table tablename;


第十一部分:數據的導入導出
    1.數據導出:d:\soft\wamp\bin\mysql\mysql5.6.17\bin>mysqldump -uroot -p test > c:/test.sql
    2.數據導入:d:\soft\wamp\bin\mysql\mysql5.6.17\bin>mysql -uroot -p test < c:/test.sql


第十二部分:MyISAM
    讀鎖:某我的讀鎖了一張表,其它人能夠讀,可是全部人都不可寫增刪改;
    寫鎖:某我的讀鎖了一張表,只有本人能夠讀增刪改,其它人都不能夠增刪改,連 讀 也不能夠;
    1.加讀鎖:lock table tablename read;
    2.加寫鎖:lock table tablename write;
    3.解鎖:  unlock tables;

    
第十三部分:服務器的優化
   a.四種字符集的選擇:服務器字符集、數據庫字符集、客戶端字符集、鏈接字符集。
     設置方法:在mysql配置文件中【client】的屬性:default-character-set=utf8
               (控制戶服端字符集和鏈接字符集)
               在mysql配置文件中【mysqld】的屬性: character-set-server=utf8
               (控制服務器字符集和數據庫字符集以及繼承下來的表的字符集)
              還有注意【mysqld】中的校驗字符集: collation-server=utf8-general-ci;主要是做用於排序。


第十四部分:socket問題
   mysql配置文件中:
    [client]
    #password    = your_password
    port        = 3306
    socket        = /tmp/mysql.sock
   有時候登陸的時候因爲socket問題登陸的時候,可使用新的命令,從新制定協議主機等:
   命令:mysql -uroot -p密碼 --protocol tcp --hlocalhost
   若是socket文件丟失,重啓mysql便可。

第十五部分:MySQL root密碼破解     1.關閉進程或者服務:pkill mysqld    2.跳過用戶受權表:D:\soft\wamp\bin\mysql\mysql5.6.17\bin mysqld_safe --skip-grant-tables --users=mysql&      全部用戶的表都存在於mysql的user表中。  3.修改密碼:update mysql.user set password=password('123') where user= "root" and host="localhost"     4.殺掉進程,重啓mysql便可。

相關文章
相關標籤/搜索