Mysql效能優化,三正規化,資料庫優化方案

2021-10-03 08:31:56 字數 4353 閱讀 9229

1. 資料庫設計

2. sql語句優化

3. 資料庫引數配置

4. 恰當的硬體資源和作業系統

此外,使用適當的儲存過程,也能提公升效能。

這個順序也表現了這四個工作對效能影響的大小

1.explain關鍵字作用2、explain使用舉例

explain select * from emp where ename=「wsrcla」

會產生如下資訊:

select_type: 表示查詢的型別。

table: 輸出結果集的表

type: 表示表的連線型別

possible_keys: 表示查詢時,可能使用的索引

key: 表示實際使用的索引

key_len: 索引欄位的長度

rows: 掃瞄出的行數(估算的行數)

extra: 執**況的描述和說明

3、explain資訊詳解

1. id select識別符。這是select的查詢序列號

2. select_type

primary : 子查詢中最外層查詢

subquery : 子查詢內層第乙個select,結果不依賴於外部查詢

dependent subquery: 子查詢內層第乙個select,依賴於外部查詢

union : union語句中第二個select開始後面所有select,

******: 簡單的 select 查詢,不使用 union 及子查詢

union : union 中的第二個或隨後的 select 查詢,不依賴於外部查詢的結果集

3. table : 顯示這一步所訪問資料庫中表名稱

4. type : 對錶訪問方式

all: select * from emp \g 完整的表掃瞄 通常不好

select * from (select * from emp where empno = 1) a ;

system: 表僅有一行(=系統表)。這是const聯接型別的乙個特

const: 表最多有乙個匹配行

5. possible_keys : 該查詢可以利用的索引,如果沒有任何索引顯示 null

6. key : mysql 從 possible_keys 所選擇使用索引

7. rows : 估算出結果集行數

8. extra查詢細節資訊

no tables : query語句中使用from dual 或不含任何from子句

using filesort : 當query中包含 order by 操作,而且無法利用索引完成排序,

impossible where noticed after reading const tables: mysql query optimizer

通過收集統計資訊不可能存在結果

using temporary: 某些操作必須使用臨時表,常見 group by ; order by

using where: 不用讀取表中所有資訊,僅通過索引就可以獲取所需資料;

1、索引為什會使查詢變快2、索引的代價3、索引使用原則4、mysql四種索引的區別

5、索引的使用

1. 建立索引

1、create [unique|fulltext] index index_name on tbl_name (col_name [(length)] [asc | desc] , ……);

2、alter table table_name add index [index_name] (index_col_name,…)

2. 刪除索引

1、drop index index_name on tbl_name;

2、alter table table_name drop index index_name;

注:刪除主鍵(索引)比較特別: alter table t_b drop primary key;

3. 建立普通索引方法

#1 檢視student表中有哪些索引

mysql> show index from student; #檢視student表中有哪些索引

#2 建立最基本的的索引

mysql> create index index_name on student(name(32)); #將student中欄位name建立成索引

#3 刪除索引的語法

mysql> drop index index_name on student;

4. 建立唯一索引

注: 它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值

#1建立索引

mysql> create unique index index_name on student(name(32));

6、使用或不使用索引的情況1. 下列幾種情況下有可能使用到索引

1,對於建立的多列索引,只要查詢條件使用了最左邊的列,索引一般就會被使用。

2,對於使用like的查詢,查詢如果是 『%aaa』 不會使用到索引, 『aaa%』 會使用到索引。

2. 下列的表將不使用索引

1, 如果條件中有or,即使其中有條件帶索引也不會使用。

2, 對於多列索引,不是使用的第一部分,則不會使用索引。

3, like查詢是以%開頭

4, 如果列型別是字串,那一定要在條件中將資料使用引號引用起來。否則不使用索引。(新增時,字串必須』』)

5, 如果mysql估計使用全表掃瞄要比使用索引快,則不使用索引。

1、都不使用索引2、like不使用索引、普通查詢使用索引

3、like查詢起始也可以使用索引

1. 優化索引、sql 語句、分析慢查詢

2. 設計表的時候嚴格根據資料庫的設計正規化來設計資料庫

3. 使用快取,把經常訪問到的資料而且不需要經常變化的資料放在快取中,能節約磁碟io

4. 優化硬體;採用ssd,使用磁碟佇列技術(raid0,raid1,rdid5)等;

5. 採用mysql 內部自帶的表分割槽技術,把資料分層不同的檔案,能夠提高磁碟的讀取效率

6. 垂直分表;把一些不經常讀的資料放在一張表裡,節約磁碟i/o

7. 主從分離讀寫;採用主從複製把資料庫的讀操作和寫入操作分離開來

8. 分庫分表分機器(資料量特別大),主要的的原理就是資料路由

9. 選擇合適的表引擎,引數上的優化

10. 進行架構級別的快取,靜態化和分布式

11. 不採用全文索引

1、儲存引擎選擇:如果資料表需要事務處理,應該考慮使用innodb,因為它完全符合acid特性。如果不需要事務處理,使用預設儲存引擎myisam是比較明智的

2、分表分庫,主從。

3、對查詢進行優化,要盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引

4、應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄

5、應盡量避免在 where 子句中使用 != 或 <> 操作符,否則將引擎放棄使用索引而進行全表掃瞄

6、應盡量避免在 where 子句中使用 or 來連線條件,如果乙個欄位有索引,乙個字段沒有索引,將導致引擎放棄使用索引而進行全表掃瞄

7、update 語句,如果只更改1、2個字段,不要update全部字段,否則頻繁呼叫會引起明顯的效能消耗,同時帶來大量日誌

8、對於多張大資料量(這裡幾百條就算大了)的表join,要先分頁再join,否則邏輯讀會很高,效能很差。

mysql三正規化 MySQL資料庫三正規化

設計關係型資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。目前關係型資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴斯 科德正規化 bcnf 第四正規化 4nf 和第五正...

MySQL資料庫三正規化

設計關係型資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。目前關係型資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴斯 科德正規化 bcnf 第四正規化 4nf 和第五正...

MySQL 資料庫三正規化

資料庫三正規化 1 第一正規化 1nf 定義 每一列都是不可分割的原子資料項 強調的是列的原子性 例 乙個表 聯絡人 姓名,性別,如果在實際場景中,乙個聯絡人有家庭 和公司 那麼這種表結構設計就沒有達到1nf。解決方案 要符合1nf我們只需把列 拆分,即 聯絡人 姓名,性別,家庭 公司 1nf很好辨...