Mysql安裝、配置、優化

1、安裝Mysql5.5爲例。
 
一、運行 mysql 安裝文件;
  二、按 Next,而後選擇安裝方式,有 "Typical(默認)"、"Complete(徹底)"、"Custom(用戶自定義)",選擇第二個選項 "Custom",下一步, MySQL Server (mysql服務器), Developer Components (開發者部分), Debug Symbols (調試符號), Server data files (服務器數據文件) 默認;
  三、改變安裝路徑;原路徑是"C:\Program Files\MySQL\MySQL Server 5.5\",也能夠修改成:"E:\Program Files\MySQL Server 5.5\"。下一步,安裝,會彈出窗口,點下一步,再點下一步,選擇"Launch the MySql instance Configuration Wizard",意思是啓動MySQL實例配置嚮導,再點擊Finish,再點下一步,Detailed Configuration(詳細配置)和Standard Configuration(標準配置),選擇詳細配置,下一步;
  四、選擇服務器類型,"Developer Machine(開發測試類,mysql佔用不多資源)"、"Server Machine(服務器類型,mysql佔用較多資源)"、"DedicatedMySQL Server Machine(專門的數據庫服務器,mysql佔用全部可用資源)",根據本身的類型選擇,測試軟件選"Developer Machine",服務器選"Server Machine",下一步;
  五、選擇建立 MySQL表時使用的表處理器,"Multifunctional Database"(通用多功能型,好,同時使用InnoDB和 MyISAM 儲存引擎)、"Transactional Database Only"(服務器類型,專一於事務處理,主要使用 InnoDB 只偶爾使用 MyISAM,通常)、"Non-Transactional DatabaseOnly"(非事務處理型,較簡單,徹底禁用 InnoDB 儲存引擎,將全部服務器資源指派給 MyISAM 儲存引擎),隨本身的用途而選擇。
 
 
 
 

二 、新增my.ini文件初始化配置java

[mysqld]mysql

# 配置端口號sql

port=3306數據庫

# 設置mysql的安裝目錄服務器

basedir=C:\\java\\mysql-8.0.11-winx64性能

# 設置mysql數據庫的數據的存放目錄測試

datadir=C:\\java\\mysql-8.0.11-winx64\\Data優化

# 設置容許最大鏈接數url

max_connections=200spa

# 設置容許鏈接失敗的次數。

max_connect_errors=10

# 服務端使用的字符集默認爲UTF8

character-set-server=utf8

# 建立新表時將使用的默認存儲引擎

default-storage-engine=INNODB

# 默認使用「mysql_native_password」插件認證

default_authentication_plugin=mysql_native_password [mysql]

# 設置mysql客戶端默認字符集

default-character-set=utf8 [client]

# 設置mysql客戶端鏈接服務端時默認使用的端口

port=3306 default-character-set=utf8

 

MySQL優化

1.  避免使用 select *       你須要什麼信息,就查詢什麼信息,查詢的多了,查詢的速度確定就會慢

2.  當你只須要查詢出一條數據的時候,要使用 limit 1   好比你要查詢數據中是否有男生,只要查詢一條含有男生的記錄就好了,後面不須要再查了,使用Limit 1 能夠在找到一條數據後中止搜索

3.   創建高性能的索引   索引不是隨便加的也不是索引越多越好,更不是全部索引對查詢都有效

4.   建數據庫表時,給字段設置固定合適的大小.    字段不能設置的太大,設置太大就形成浪費,會使查詢速度變慢

5.   要儘可能使用not null   

6.   EXPLAIN 你的 SELECT 查詢   使用EXPLAIN,能夠幫助你更瞭解MySQL是如何處理你的sql語句的, 你能夠查看到sql的執行計劃,這樣你就能更好的去了解你的sql語句的不足,而後優化語句.

7.   在Join表的時候,被用來Join的字段,應該是相同的類型的,且字段應該是被建過索引的,這樣,MySQL內部會啓動爲你優化Join的SQL語句的機制。 

8.   若是你有一個字段,好比「性別」,「國家」,「民族」, 「省份」,「狀態」或「部門」,這些字段的取值是有限並且固定的,那麼,應該使用 ENUM 而不是 VARCHAR。  

 由於在MySQL中,ENUM類型被看成數值型數據來處理,而數值型數據被處理起來的速度要比文本類型快得多。這樣,咱們又能夠提升數據庫的性能

9.  垂直分割    將經常使用和有關係的字段放在相同的表中,把一張表的數據分紅幾張表    這樣能夠下降表的複雜度和字段的數目,從而達到優化的目的

10.  優化where查詢

        ①. 避免在where子句中對字段進行表達式操做

                   好比: select 列 from 表 where age*2=36;   建議改爲  select 列 from 表 where age=36/2;

        ②. 應儘可能避免在 where 子句中使用 !=或<> 操做符,不然將引擎放棄使用索引而進行全表掃描。

        ③. 應儘可能避免在 where 子句中對字段進行 null 值 判斷

        ④. 應儘可能避免在 where 子句中使用 or 來鏈接條件

 11.   不建議使用%前綴模糊查詢,這種查詢會致使索引失效而進行全表掃描

     例如LIKE 「%name」或者LIKE 「%name%這兩種都是不建議的.可是可使用LIKE 「name%」。

     對於LIKE 「%name%,可使用全文索引的形式

  12.  要慎用in和 not in 

                例如:select id from t where num in(1,2,3)   建議改爲 select id from t where num between 1 and 3

                 對於連續的數值,能用 between 就不要用 in 了

   13. 理解in和exists, not in和not exists的區別

         不少時候用 exists 代替 in 是一個好的選擇:如查詢語句使用了not in那麼內外表都進行全表掃描,沒用到索引,而not exists子查詢依然能用到表上索引,因此不管哪一個表大,用not exists都比not in要快。

         select num from a where num in(select num from b)

    建議改爲: select num from a where exists(select 1 from b where num=a.num)

        區分in和exists主要是形成了驅動順序的改變(這是性能變化的關鍵),若是是exists,那麼之外層表爲驅動表,先被訪問,若是是IN,那麼先執行子查詢。因此IN適合於外表大而內表小的狀況;EXISTS適合於外表小而內表大的狀況。

關於not in和not exists,推薦使用not exists,不只僅是效率問題,not in可能存在邏輯問題

14. 理解select Count (*)和Select Count(1)以及Select Count(column)區別

  通常狀況下,Select Count (*)和Select Count(1)兩着返回結果是同樣的

    假如表沒有主鍵(Primary key), 那麼count(1)比count(*)快,

    若是有主鍵的話,那主鍵做爲count的條件時候count(主鍵)最快

    若是你的表只有一個字段的話那count(*)就是最快的

   count(*) 跟 count(1) 的結果同樣,都包括對NULL的統計,而count(column) 是不包括NULL的統計

   (優化部分連接:https://www.jianshu.com/p/074f3eafcadf)   
相關文章
相關標籤/搜索