Files
Interview-Notebook/notes/MySQL.md
T
2018-02-22 14:47:22 +08:00

12 KiB

?𣸑????

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 ?快???????

SELECT actor_id FROM sakila.actor WHERE actor_id + 1 = 5;

3.2 ??????

???? BLOB??TEXT ?? VARCHAR ??????孝??????????????????????????????????

???????????????????? ????????? ?????????????????????????????????????????????完???????????? 1 ???????????????朵???????????????

3.3 ????????

??????????????????????志????????????????????????????????????芍??????????????孝????? actor_id ?? file_id ???????????????

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 ?戒??????????????紫

SELECT COUNT(DISTINCT staff_id)/COUNT(*) AS staff_id_selectivity,
COUNT(DISTINCT customer_id)/COUNT(*) AS customer_id_selectivity,
COUNT(*)
FROM payment;
   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 ????? keyi ?? keyi+1?????? null?????????????????? key ???? keyi ??妊?? keyi+1??

?? 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 ????????????????

SELECT * FROM sakila.film_actor WHERE film_id = 1;

4. ????? DELETE ?? INSERT ???

??????????快???????????????????????????????????????????????????????妊????????????

DELEFT FROM messages WHERE create < DATE_SUB(NOW(), INTERVAL 3 MONTH);
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. ??????

?羊?????