## 將字段很多的表分解成多個(gè)表
對于字段較多的表,可以將這些數(shù)據(jù)分離出來形成新表.因?yàn)楫?dāng)一個(gè)表的數(shù)據(jù)量很大時(shí),會(huì)由于使用頻率低的字段的存在而變低.
假設(shè)會(huì)員信息表存儲(chǔ)會(huì)員登錄認(rèn)證信息,該表中有很多字段,如id/姓名/密碼/地址/電話/個(gè)人描述等....其中地址,電話,個(gè)人描述等字段并不常用,可以分離出來形成新的表.
### 創(chuàng)建表
```sql
create table user1 (
id ini(11) not null auto_increment,
...
primary key (id)
);
create table user2 (
id int(11) not null default 0,
...
)
```
### 數(shù)據(jù)操作思路
#### 插入數(shù)據(jù)
先插入user1表數(shù)據(jù),然后拿到id,然后再將剩余的數(shù)據(jù)和id插入user2表中
#### 查詢數(shù)據(jù)
```sql
select * from user1 left join user2 on user1.id = user2.id;
```
#### 刪除數(shù)據(jù)
可以使用觸發(fā)器
## 添加中間表
對于需要經(jīng)常聯(lián)合查詢的表,可以建立中間表以提高上查詢效率.通過建立中間表,把需要經(jīng)常聯(lián)合查詢的數(shù)據(jù)插入到中間表中,然后將原來的聯(lián)合查詢改為對中間表的查詢,以此來提高查詢效率.
## 增加冗余字段
按照范式原則應(yīng)該減少冗余字段,但是,合理地增加冗余字段可以提高查詢速度.
表的規(guī)范化越高,表與表之間的關(guān)系就越多,需要連接查詢的情況也就越多.
## 優(yōu)化插入記錄的速度
插入數(shù)據(jù)時(shí),影響插入速度的主要是索引/唯一索引的校驗(yàn)/一次插入數(shù)據(jù)的條數(shù).
### 插入多條語句
如果插入大量數(shù)據(jù),建立索引會(huì)降低插入記錄的速度,回了解決這種情況,可以在插入前禁用索引,數(shù)據(jù)插入完畢后再開啟索引.
> 對于空表批量導(dǎo)入數(shù)據(jù),則不需要進(jìn)行次操作,因?yàn)镸yISAM引擎的表是在導(dǎo)入數(shù)據(jù)之后才建立的
#### 禁用索引
```sql
alter table 表名 disable keys;
```
#### 重新啟用索引
```sql
alter table 表名 enable keys;
```
### 禁用唯一性檢驗(yàn)
插入數(shù)據(jù)時(shí),MySQL會(huì)對插入的記錄進(jìn)行唯一性校驗(yàn).這種唯一性校驗(yàn)也會(huì)降低插入記錄的速度,為了降低這種情況對速度的影響,可以在插入記錄前禁用唯一性檢驗(yàn),等到記錄插入完畢后再開啟.
#### 禁用唯一性校驗(yàn)
```sql
set unique_checks = 0;
```
#### 開啟唯一性校驗(yàn)
```sql
set unique_checks = 1;
```
### 使用批量插入
插入多條語句記錄時(shí),可以使用一條一條插入,也可以使用一次插入多條,一次插入多條的速度會(huì)快過一條一條插入
### InnoDB表優(yōu)化
#### 禁用唯一性校驗(yàn)
##### 關(guān)閉
```sql
set unique_checks = 0;
```
##### 開啟
```sql
set unique_checks = 1;
```
#### 禁用外鍵檢查
##### 關(guān)閉
```sql
set foreign_key_checks = 0;
```
##### 開啟
```sql
set foreign_key_checks = 1;
```
#### 禁止自動(dòng)提交
##### 關(guān)閉
```sql
set autocommit = 0;
```
##### 開啟
```sql
set autocommit = 1;
```
## 分析表/檢查表/優(yōu)化表
### 分析表
主要分析關(guān)鍵字的分布
```sql
analyze [local | no_write_to_binlog] table 表 [,表2...];
```
local是no_write_to_binlog關(guān)鍵詞的別名,表示不寫入二進(jìn)制日志
結(jié)果信息解釋
|參數(shù)|說明|
|-|-|
|Table|表示分析的表的名稱|
|Op|表示執(zhí)行的操作,analyze表示進(jìn)行分析操作|
|Msg_type|表示信息類型: 狀態(tài)status/信息(info)/注意(note)/警告warning/錯(cuò)誤(error)|
|Msg_text|顯示信息|
### 檢查表
主要檢查表是否存在錯(cuò)誤
> option只對MyISAM類型的表有效,執(zhí)行過程中會(huì)加上只讀鎖
```sql
check table 表名 [,表名...] option = {quick|fast|medium|extended|changed} [option...]...
```
|參數(shù)|說明|
|quick|不掃描行|
|fast|只檢查沒有被正確關(guān)閉的表|
|medium|掃描行|
|extended|對每行的所有關(guān)鍵字進(jìn)行全面查找|
|changed|只檢查上次檢查后被更改的表|
### 優(yōu)化表
主要是刪除或者更新造成的空間浪費(fèi)
> 對InnoDB和MyISAM類型都有效,但是只能優(yōu)化表中的varchar/blob或text類新的字段
```sql
optimize [local|no_write_to_binlog] table 表名 [,表名...];
```
local是no_write_to_binlog關(guān)鍵詞的別名,表示不寫入二進(jìn)制日志
- 簡介
- 數(shù)據(jù)庫
- 數(shù)據(jù)表
- 創(chuàng)建數(shù)據(jù)表
- 查看數(shù)據(jù)表結(jié)構(gòu)
- 修改數(shù)據(jù)表
- 刪除數(shù)據(jù)表
- 查詢數(shù)據(jù)
- 表單查詢
- 聚合查詢
- 鏈接查詢
- 子查詢
- 聯(lián)合查詢
- 正則查詢
- 數(shù)據(jù)管理
- 數(shù)據(jù)類型
- 添加數(shù)據(jù)
- 更新數(shù)據(jù)
- 刪除數(shù)據(jù)
- 索引
- 索引分類
- 設(shè)計(jì)原則
- 添加索引
- 查看索引
- 刪除索引
- 視圖
- 視圖操作
- 視圖應(yīng)用
- 事務(wù)
- 觸發(fā)器
- 存儲(chǔ)過程和函數(shù)
- 變量
- 異常處理
- 光標(biāo)
- 流程控制
- 存儲(chǔ)過程
- 自定義函數(shù)
- 內(nèi)置函數(shù)
- 數(shù)學(xué)
- 字符串
- 日期和時(shí)間
- 條件判斷
- 系統(tǒng)信息
- 加/解密
- 其他
- 用戶管理
- 登錄和退出
- 新建用戶
- 刪除用戶
- 修改用戶
- 找回ROOT密碼
- 權(quán)限管理
- 備份恢復(fù)
- 備份數(shù)據(jù)
- 恢復(fù)數(shù)據(jù)
- 日志
- 二進(jìn)制日志
- 錯(cuò)誤日志
- 查詢?nèi)罩?/a>
- 慢查詢?nèi)罩?/a>
- 性能優(yōu)化
- 優(yōu)化查詢語句
- 優(yōu)化數(shù)據(jù)庫結(jié)構(gòu)
- 優(yōu)化服務(wù)器
- 主從復(fù)制
- WIN系統(tǒng)主從復(fù)制
- Linux單機(jī)主從復(fù)制
- Linux聯(lián)機(jī)主從復(fù)制
- 參數(shù)配置
- 日常管理和維護(hù)
- 切換主從服務(wù)器
- PHP操作
- 連接
- 創(chuàng)建數(shù)據(jù)庫
- 插入數(shù)據(jù)
- 插入多條數(shù)據(jù)
- 預(yù)處理語句
- 查詢數(shù)據(jù)
- 預(yù)處理語句
- 實(shí)戰(zhàn)應(yīng)用
- 分表
