MySQL簡單最佳化

來源:互聯網
上載者:User

標籤:

1:對 MySQL 最佳化是一個綜合性的技術,主要包括:    a、標的設計合理(符合 3NF)    b、添加適當索引(index)(普通索引、主鍵索引、唯一索引 unique、全文索引)    c、分表技術(水平分隔、垂直分隔)    d、讀寫(寫delete/update/add)分離    e、預存程序(模組化編程,可以提高速度)    f、對 MySQL 配置最佳化(配置最大並發數,調整緩衝大小)    g、MySQL 伺服器硬體升級    h、定時的清除不需要的資料,定時進行磁碟重組(myISAM)2:什麼樣的表才是符合 3NF(範式)    表的範式,是首先符合 1NF,才能滿足 2NF,進一步滿足 3NF。    2.1:1NF:即表的列具有原子性,不接在分解,即列的資訊粉能分解,只要資料庫是關係型資料庫(mysql、oracle、db2、informix、sysbase、sql sever),就自動滿足 1NF。        所謂第一範式(1NF)是指資料庫表的每一列都是不可分割的基本資料項目,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義一個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關聯性。在第一範式(1NF)中表的每一行只包含一個執行個體的資訊。簡而言之,第一範式就是無重複的列。        資料庫的分類:        關係型的資料庫:mysql、oracle、db2、informix、sysbase、sql sever        非關係型資料庫:特點:物件導向或者是集合        NoSql資料庫:MongoDB(特點是面向文檔)    2.2: 2NF:表中的記錄是唯一的,就滿足 2NF,通常我們設計一個主鍵來實現。         第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個執行個體或行必須可以被唯一地區分。為實現區分通常需要為表加上一個列,以儲存各個執行個體的唯一標識。要求實體的屬性完全依賴於主關鍵 字,簡而言之,第二範式就是非主屬性非部分依賴於主關鍵字。主鍵不含商務邏輯    2.3: 滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊。簡而言之,第三範式就是屬性不依賴於其它非主屬性。        3NF:即表中不要有冗餘,就是說,表的資訊,如果能夠被推匯出來,就不應該單獨的設計一個來存放,比如下面的表就不滿足 應當為:    反 3NF:但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高運行效率,就必須降低範式標準,適當保留冗餘資料。具體做法是:在概念資料模型設計時遵守第三範式,降低凡是標準的工作放到物理資料模型設計時考慮。降低範式就是增加欄位,允許冗餘。 3:SQL 陳述式最佳化    問題:如何從一個大項目中迅速的定位執行速度慢的語句(定位慢查詢)    ①首先我們要瞭解 MySQL 資料庫的一些運行狀態如何查詢(比如想知道當前MySQL已耗用時間、一共運行了多少次select/update/delete。。、當前連結)        常用 執行命令:            show status like "uptime";        //開啟了多長時間            show status like "com_select"(come_delet\com_update);    //執行了多少次查詢(刪除,添加)            show [session | global] status like ...  如果不寫[session | global] 預設是session(當前)會話,指去除當前視窗的執行,如果想看所有(從MySQL啟動到現在,則應該加入 global)            show status like "connections";            //試圖連結MySQL伺服器的次數            show status like "slow_queries";           //顯示慢查詢次數    ②如何定位慢查詢            在預設情況下,MySQL認為 10秒才是一個慢查詢            修改 MySQL 的慢查詢時間:                a、show variables like "long_query_time"(查詢預設慢查詢時間)                b、set long_query_time=1;(設定慢查詢時間為一秒,重啟mysql會恢複到10s)            修改命令執行結束符:delimiter +$$(結束符)            如果把慢查詢的sql記錄到我們的一個日誌中,在預設情況下,我們的mysql不會記錄慢查詢,需要重啟mysql時候,指定慢查詢才行    資料庫有各種資料對象(表,預存程序,視圖,函數,觸發器)            先關閉mysql在啟動,如果啟用了慢查詢日誌,預設吧這個檔案放到my.ini檔案中記錄的位置(datadir="");            啟用慢查: --safe-mode (安全模式)                        最佳化問題:        1、添加索引(全文索引/唯一索引/主鍵索引/普通索引)            ①主鍵索引:當一張表,把某個列設為主鍵,則該列表就是主鍵索引           如果在建立表的時候,沒有指定主鍵索引,也可以在建立表後,再添加                命令:alter table 表名 add primary key(列明);                例:create table abc (id int, name varchare(32) not null default "");(無索引)                       alter table abc add primary key (id); (添加索引)                資料庫添加索引會有一定的記憶體開銷,在 data 中會產生三種檔案:                                       .frm:表示表結構                    .MYD:表示表資料                    .MYI:表示表索引        2、查詢索引:             ①desc 表名【該方法的缺點:不能顯示索引名】             ②show index(es) from 表名             ③show key from 表名 

 

MySQL簡單最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.