CS-Notes/notes/MySQL.md
2018-02-22 14:47:22 +08:00

12 KiB
Raw Blame History

?썷????

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

???????????????????<3F>k?????????????????????????????????

????????????????????㏊?????????㏁????????B-Tree ?????????????????????╋?????????????㎌?????????????????????????

?????????????????????????????<3F>

???????????????㎒??????㎿??????????????????

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. ????㎾????<3F>k????????????????????썷?????????????????????????????????????

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

???????????썷????????<3F>?????????????????????????썷?????????????㎡????<3F>????썷???????????????????㏊?????㎡???? 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. ??????????

???????????????????????????????????????????????????????㎡?

??<3F>????? SELECT * ???????????????????㎡?

3. ??????????

?????? LIMIT ???????????????㎉?㎡?

????????????????????????????????擄????????????????????????????????????????????<3F>k???????????????<3F>?㎌?????????? 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. ????????????

????????????????㎡????㎉㎡????㎿???????????????????????????????????<3F>??㎉???????썷??????????????????썷???????????????????÷????????????

2. ??≤??????????

??????????????????????㎒???????????????㎒?????????????????????㎑????????????????????

3. ????Ω?

??????????<3F>??????㎐?????????????????????????壯??????????????? 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. ??????

?┩?????