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 ???????妊?
?????????????忱???????????????????????????????????????????
???
- ??????????????????????? I/O ??????
- ???????????? B-Tree ?孝??????????????
???
- ?????????????????? I/O ??????????????????????????????????秄????????????????
- ???????????????????????????????????????????
- ????????????????????????????忪???????????竹?芍?
- ?????????????????孝??𣸑????????????????????????????孝????????㊣?????????????
- ????忌????屔????????????????????𣸑?????????????????????????????????????
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 ??????忱?????????
??????????????????扭???????????????????




