mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-10-20 07:33:51 +00:00
422 lines
12 KiB
Markdown
422 lines
12 KiB
Markdown
<!-- GFM-TOC -->
|
|
* [?𣸑????](#?𣸑????)
|
|
* [1. InnoDB](#1-innodb)
|
|
* [2. MyISAM](#2-myisam)
|
|
* [3. InnoDB ?? MyISAM ????](#3-innodb-??-myisam-????)
|
|
* [????????](#????????)
|
|
* [1. ????](#1-????)
|
|
* [2. ??????](#2-??????)
|
|
* [3. ?????](#3-?????)
|
|
* [4. ????????](#4-????????)
|
|
* [????](#????)
|
|
* [1. ????????](#1-????????)
|
|
* [1.1 B-Tree ????](#11-b-tree-????)
|
|
* [1.2 ???????](#12-???????)
|
|
* [1.3. ????????????R-Tree??](#13-????????????r-tree??)
|
|
* [1.4 ???????](#14-???????)
|
|
* [2. ?????????](#2-?????????)
|
|
* [3. ???????](#3-???????)
|
|
* [3.1 ????????](#31-????????)
|
|
* [3.2 ??????](#32-??????)
|
|
* [3.3 ????????](#33-????????)
|
|
* [3.4 ?????快????](#34-?????快????)
|
|
* [3.5 ???????](#35-???????)
|
|
* [3.6 ????????](#36-????????)
|
|
* [4. B-Tree ?? B+Tree ???](#4-b-tree-??-b+tree-???)
|
|
* [4. 1 B-Tree](#4-1-b-tree)
|
|
* [4.2 B+Tree](#42-b+tree)
|
|
* [4.3 ?????????????? B+Tree](#43-??????????????-b+tree)
|
|
* [4.4 ?????? B-Tree ?? B+Tree](#44-??????-b-tree-??-b+tree)
|
|
* [??????????](#??????????)
|
|
* [1. Explain](#1-explain)
|
|
* [2. ??????????](#2-??????????)
|
|
* [3. ??????????](#3-??????????)
|
|
* [4. ????? DELETE ?? INSERT ???](#4-?????-delete-??-insert-???)
|
|
* [???????](#???????)
|
|
* [?????????????](#?????????????)
|
|
* [1. ???????](#1-???????)
|
|
* [2. ??????](#2-??????)
|
|
* [?羊?????](#?羊?????)
|
|
<!-- GFM-TOC -->
|
|
|
|
# ?𣸑????
|
|
|
|
## 1. InnoDB
|
|
|
|
InnoDB ?? MySQL ??????????????秄???????? InnoDB ??????????????????????????𣸑???紫
|
|
|
|
???? MVCC ?????????????????????????????????????????????????
|
|
|
|
?????????????????????????????????????抗?????????
|
|
|
|
????????????????????????????????????????????????????????忱??? hash ??????????????????????????????????????????????????????????
|
|
|
|
????宏???????????????????????
|
|
|
|
## 2. MyISAM
|
|
|
|
MyISAM ??????????????????????????????????�????GIS??????? MyISAM ???????????技?????????????????????????
|
|
|
|
????????????????????????妊?
|
|
|
|
????????????????技??????????????????????????????????????????????宏????????????????????????????
|
|
|
|
???????????????????妊?
|
|
|
|
???????? DELAY_KEY_WRITE ??????????????????????????????????????????忱???????????忱??????快??????????????????????????????????????????????????忱????????????????????????忱?????????????????????????????????????????????????????????
|
|
|
|
??????????????????????????????????????????????????????? MyISAM ?????
|
|
|
|
???????????????????妊?????????????????????????????????? MyISAM??
|
|
|
|
MyISAM ?????????????????𣸑?????????宏???????????芍?
|
|
|
|
## 3. InnoDB ?? MyISAM ????
|
|
|
|
**????**
|
|
|
|
InnoDB ??????????
|
|
|
|
**????**
|
|
|
|
InnoDB ?????????????
|
|
|
|
**???????**
|
|
|
|
MyISAM ??????????????? InnoDB ??????????????????????
|
|
|
|
**????**
|
|
|
|
MyISAM ??????????? InnoDB ??????技?????
|
|
|
|
**????????**
|
|
|
|
MyISAM ????????????????????????
|
|
|
|
# ????????
|
|
|
|
## 1. ????
|
|
|
|
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT ?????? 8, 16, 24, 64 竹?𣸑????????????妊??????芍?
|
|
|
|
INT(11) ?快????????梀??????????????????????????𣸑???????????????????
|
|
|
|
## 2. ??????
|
|
|
|
FLOAT ?? DOUBLE ??????????DECIMAL ??????妊???????CPU ????????????????????? DECIMAl ??????????? DECIMAL ?????????????????????????
|
|
|
|
FLOAT??DOUBLE ?? DECIMAL ??????????扭????? DECIMAL(18, 9) ?????? 18 竹??? 9 竹?𣸑妊?????????? 9 竹?𣸑?????????
|
|
|
|
## 3. ?????
|
|
|
|
????? CHAR ?? VARCHAR ?????????????????????????????
|
|
|
|
VARCHAR ??????????????????????????𣸑??????????????????? UPDATE ????????忌??????????????????????????????妊????????忪?????????MyISAM ???志????????汛𣸑???? InnoDB ??????????????戒??????
|
|
|
|
VARCHAR ??????????汕????? CHAR ???????
|
|
|
|
## 4. ????????
|
|
|
|
MySQL ?????????????????????????DATATIME ?? TIMESTAMP??
|
|
|
|
**DATATIME**
|
|
|
|
???????? 1001 ?? 9999 ????????????????????? 8 ????𣸑???
|
|
|
|
???????????
|
|
|
|
?????????MySQL ???????????????????????? DATATIME ??????�2008-01016 22:37:08???????? ANSI ????????????????????????
|
|
|
|
**TIMESTAMP**
|
|
|
|
?? UNIX ?????????????? 1970 ?? 1 ?? 1 ????????????????????????????????? 4 ????????????? 1970 ?? ?? 2038 ??
|
|
|
|
????????抄??
|
|
|
|
MySQL ???? FROM_UNIXTIME() ?????? Unxi ??????????????????? UNIX_TIMESTAMP() ?????????????? Unix ??????
|
|
|
|
??????????????????????? TIMESTAMP ?快?????????????????????
|
|
|
|
????????? TIMESTAMP????????? DATETIME ???完??????
|
|
|
|
# ????
|
|
|
|
????????𣸑?????????????????????????????????????𣸑??????志?????????????????
|
|
|
|
???????????????????????????????????
|
|
|
|
??????妊???????????????????????????????完???????快?????????????????完????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????¯?????????
|
|
|
|
## 1. ????????
|
|
|
|
### 1.1 B-Tree ????
|
|
|
|
B-Tree ?????????? MySQL ?𣸑?????????????????
|
|
|
|
???????????????????屔?????????????????????????????????
|
|
|
|
????????????????????孝?????????抄????????B-Tree ?????????????????????朱?????????????技?????????????????????????
|
|
|
|
?????????????????????????????�
|
|
|
|
???????????????快??????志??????????????????
|
|
|
|
### 1.2 ???????
|
|
|
|
????????????????????????
|
|
|
|
?? MySQL ????? Memory ??????????????????
|
|
|
|
InnoDB ?????????????????妊????????????????????????????????????????????? B-Tree ???????????????????????????????? B-Tree ???????抄?????????宏??????????????????
|
|
|
|
?????????????????????????????????𣸑?????????????????????快???????????妊???????????????快??快???????????????????????????????????????????????????????????????????????????????朱??????????????????????????迆?????
|
|
|
|
### 1.3. ????????????R-Tree??
|
|
|
|
MyISAM ?𣸑??????????????????????????????𣸑??
|
|
|
|
??????????????????????????????????完?????????????????????????
|
|
|
|
### 1.4 ???????
|
|
|
|
MyISAM ?𣸑???????????????????????????快??????????????????????快????
|
|
|
|
??? MATCH AGAINST????????????? WHERE??
|
|
|
|
## 2. ?????????
|
|
|
|
- ????????????????????????????
|
|
|
|
- ??????????????????????????????
|
|
|
|
- ????? I/O ?????? I/O??
|
|
|
|
## 3. ???????
|
|
|
|
### 3.1 ????????
|
|
|
|
????志??????????志?????????????????????????????????????????????????
|
|
|
|
?????????????????? actor_id ?快???????
|
|
|
|
```sql
|
|
SELECT actor_id FROM sakila.actor WHERE actor_id + 1 = 5;
|
|
```
|
|
|
|
### 3.2 ??????
|
|
|
|
???? BLOB??TEXT ?? VARCHAR ??????孝??????????????????????????????????
|
|
|
|
???????????????????? **?????????** ?????????????????????????????????????????????完???????????? 1 ???????????????朵???????????????
|
|
|
|
### 3.3 ????????
|
|
|
|
??????????????????????志????????????????????????????????????芍??????????????孝????? actor_id ?? file_id ???????????????
|
|
|
|
```sql
|
|
SELECT file_id, actor_ id FROM sakila.film_actor
|
|
WhERE actor_id = 1 OR film_id = 1;
|
|
```
|
|
|
|
### 3.4 ?????快????
|
|
|
|
?????????????????戒?????秄????????????????? customer_id ???????? staff_id ???????????? customer_id ?戒??????????????紫
|
|
|
|
```sql
|
|
SELECT COUNT(DISTINCT staff_id)/COUNT(*) AS staff_id_selectivity,
|
|
COUNT(DISTINCT customer_id)/COUNT(*) AS customer_id_selectivity,
|
|
COUNT(*)
|
|
FROM payment;
|
|
```
|
|
|
|
```html
|
|
staff_id_selectivity: 0.0001
|
|
customer_id_selectivity: 0.0373
|
|
COUNT(*): 16049
|
|
```
|
|
|
|
### 3.5 ???????
|
|
|
|

|
|
|
|
????????????????????????????????????𣸑?????
|
|
|
|
????????????????抗?????????????𣸑?????InnoDB ???????????????忱???? B-Tree ???????妊?
|
|
|
|
?????????????忱???????????????????????????????????????????
|
|
|
|
**???**
|
|
|
|
1. ??????????????????????? I/O ??????
|
|
2. ???????????? B-Tree ?孝??????????????
|
|
|
|
**???**
|
|
|
|
1. ?????????????????? I/O ??????????????????????????????????秄????????????????
|
|
2. ???????????????????????????????????????????
|
|
3. ????????????????????????????忪???????????竹?芍?
|
|
4. ?????????????????孝??𣸑????????????????????????????孝????????㊣?????????????
|
|
5. ????忌????屔????????????????????𣸑?????????????????????????????????????
|
|
|
|
### 3.6 ????????
|
|
|
|
??????????????????????汍????
|
|
|
|
## 4. B-Tree ?? B+Tree ???
|
|
|
|
### 4. 1 B-Tree
|
|
|
|

|
|
|
|
??????? B-Tree??????????????????????????? [key, data]??key ?????????data ????????? key ????????
|
|
|
|
B-Tree ???????????????????????
|
|
|
|
- ?????????????????????????? B-Tree ???????
|
|
- ???????快? key ????????????孝?
|
|
- ?????????????????? key ????? key<sub>i</sub> ?? key<sub>i+1</sub>?????? null?????????????????? key ???? key<sub>i</sub> ??妊?? key<sub>i+1</sub>??
|
|
|
|
?? B-Tree ?忘? key ?????????????????????????????忪?????????????????????? data????????????????????????????志????????????????? null ????????????????????????
|
|
|
|
???????????????????????? B-Tree ????????????????????????????????????????????????????????? B-Tree ?????
|
|
|
|
### 4.2 B+Tree
|
|
|
|

|
|
|
|
?? B-Tree ????B+Tree ??????????
|
|
|
|
- ??????????????? 2d ?????? 2d+1??
|
|
- ?????𣸑 data????𣸑 key????????𣸑???
|
|
|
|
### 4.3 ?????????????? B+Tree
|
|
|
|

|
|
|
|
????????????????????????? B+Tree ????????? B+Tree ????????????????????????????????????????????????????????????????????????
|
|
|
|
### 4.4 ?????? B-Tree ?? B+Tree
|
|
|
|
?????????????????????????????????????????????????????? B-/+Tree ???????????
|
|
|
|
???????????𣸑????????�?????????????????????????𣸑?????????????妊????�????𣸑???????????????????孝?????妊???? 4k??????????????????竹?????????
|
|
|
|
?????????????????????????????𣸑??????孝???????????????????????????𣸑????????????????? I/O?????????????????????????????汎?????????????????????????????????????????????????????????????????璨?????????????????????芍????????????????????????????????????????????妊?????????????????????????????? I/O ????????????B-Tree ????米????????? h-1 ?? I/O??????????𠯫???????????? O(h)=O(logdN)????????????孝????? d ??????????????????? 100????? h ???妊??????????? 3??????????????????h ????????????????????????????????????????????????????????完??????? B-Tree ????
|
|
|
|
B+Tree ????????????????????????? d ?抄?????? B+Tree ????????? data ??????????我??????????我?????????
|
|
|
|
# ??????????
|
|
|
|
## 1. Explain
|
|
|
|
???????? SQL ???????????忌???????????孝?
|
|
|
|
- select_type : ?????????技?????????????????
|
|
|
|
- key : ????????
|
|
|
|
- rows : ????????
|
|
|
|
## 2. ??????????
|
|
|
|
???????????????????????????????????????????????????????妊?
|
|
|
|
??辰????? SELECT * ???????????????????妊?
|
|
|
|
## 3. ??????????
|
|
|
|
?????? LIMIT ???????????????宏?妊?
|
|
|
|
????????????????????????????????畟????????????????????????????????????????????屔???????????????�?技?????????? Explain ???????????? rows ????????????????
|
|
|
|
```sql
|
|
SELECT * FROM sakila.film_actor WHERE film_id = 1;
|
|
```
|
|
|
|
## 4. ????? DELETE ?? INSERT ???
|
|
|
|
??????????快???????????????????????????????????????????????????????妊????????????
|
|
|
|
```sql
|
|
DELEFT FROM messages WHERE create < DATE_SUB(NOW(), INTERVAL 3 MONTH);
|
|
```
|
|
```sql
|
|
rows_affected = 0
|
|
do {
|
|
rows_affected = do_query(
|
|
"DELETE FROM messages WHERE create < DATE_SUB(NOW(), INTERVAL 3 MONTH) LIMIT 10000")
|
|
} while rows_affected > 0
|
|
```
|
|
|
|
# ???????
|
|
|
|
**1. ????????????**
|
|
|
|
????????????????妊????宏妊????志???????????????????????????????????�??宏???????𣸑??????????????????𣸑???????????????????㊣????????????
|
|
|
|
**2. ??¯??????????**
|
|
|
|
??????????????????????快???????????????快?????????????????????忱????????????????????
|
|
|
|
**3. ????戒?**
|
|
|
|
??????????�??????忍?????????????????????????縺??????????????? payDB?????????? userDB ???????????𣸑?????????抄??????????抄???
|
|
|
|
**4. ???戒?**
|
|
|
|
????快??????????????𣸑??????????????孝????� id ??????????????抖????
|
|
|
|
**5. ????戒??????戒?????**
|
|
|
|
?????????快???????????????????????????????????戒????????
|
|
|
|
??????????????????????????????????????戒??
|
|
|
|
**6. ???戒???????**
|
|
|
|
????????? merge ?𣸑???紫
|
|
|
|
**7. ???????????????**
|
|
|
|
(1) ????????
|
|
|
|
????戒???????????????𣸑??????????????????????????????????????????????????????????????????????????????????????????????車????尿????????污???????????????????????????????
|
|
|
|
(2) ?????????????
|
|
|
|
?????????????????????????????????????????????????????????????????????????????????????????????????竹?????????????????????????????????????????汕????????????????????忪?汕?????阱?
|
|
|
|
# ?????????????
|
|
|
|
?????????????抖???????????????????抖???????????????????????????????????????抖?????????????????????????
|
|
|
|
## 1. ???????
|
|
|
|
**1.1 ??????????抖????**
|
|
|
|
??????????????????????????-????????快?????????????????
|
|
|
|
**1.2 ???? IP ????? IP ?抄?**
|
|
|
|
? MySQL ???????????? IP ??????? MySQL ????完???????? IP ??????????? MySQL ?????????
|
|
|
|
**1.3 ?技?????????**
|
|
|
|
???????????﹞????????????????????????
|
|
|
|

|
|
|
|
**1.4 ??????忱?????????**
|
|
|
|
??????????????????扭???????????????????
|
|
|
|
## 2. ??????
|
|
|
|
|
|
# ?羊?????
|
|
|
|
- ?????? MySQL
|
|
- [MySQL ????????????????????? ](http://blog.codinglabs.org/articles/theory-of-mysql-index.html)
|
|
- [MySQL ???????????? ](http://www.runoob.com/w3cnote/mysql-index.html)
|
|
- [20+ ?? MySQL ??????????????? ](https://www.jfox.info/20-tiao-mysql-xing-nen-you-hua-de-zui-jia-jing-yan.html)
|