事務(wù)
- a原子性,要么全部渠牲,成功不成功就全部回滾
- c一致性旋炒,事務(wù)執(zhí)行前與事務(wù)執(zhí)行后保持一致
- i隔離性,單獨(dú)事務(wù)數(shù)據(jù)不串签杈,多個(gè)事務(wù)并發(fā)時(shí)国葬,每個(gè)事務(wù)隔離
- d持久性,事務(wù)成功被提交,就算遇見(jiàn)其他問(wèn)題汇四,事務(wù)處理的數(shù)據(jù),是永久有效的
事務(wù)隔離
- mysql事務(wù)的默認(rèn)隔離是重復(fù)讀
- 未提交讀-- 事務(wù) 還未完全提交成功踢涌,提交部分中止通孽,就已經(jīng)讀到數(shù)據(jù),出現(xiàn)臟讀
- 提交讀-- 多個(gè)事務(wù)不能同時(shí)來(lái)睁壁,一個(gè)事務(wù)要等另一個(gè)事務(wù)完成提交后才能讀取數(shù)據(jù)
- 重復(fù)讀--事務(wù)在開(kāi)啟讀取數(shù)據(jù)的時(shí)候背苦,不能修改操作數(shù)據(jù)
- 系列化--是事務(wù)隔離的最高級(jí)別,事務(wù)串化性執(zhí)行數(shù)據(jù)潘明,可以避免臟讀行剂,幻讀,重復(fù)讀钳降,但是這種隔離效率低下厚宰,很耗數(shù)據(jù)庫(kù)性能,不推薦使用
事務(wù)并發(fā)可能遇見(jiàn)的問(wèn)題
- 臟讀--一個(gè)事務(wù) 處理過(guò)程中讀取了另外一個(gè)未提交事務(wù)的數(shù)據(jù)
- 幻讀--一般是insert操作
- 不可重復(fù)讀--一般是update操作遂填,事務(wù)讀的過(guò)程中被另外一個(gè)事務(wù)update
mysql引擎
myisam
不支持事務(wù)铲觉,不支持外鍵,只支持表級(jí)鎖吓坚,優(yōu)點(diǎn)是查詢(xún)速度速度快,主要用于insert,select操作比較多的表
支持3種不同的存儲(chǔ)格式撵幽,分別是:靜態(tài)表;動(dòng)態(tài)表礁击;壓縮表
innodb
支持事務(wù)盐杂,支持行級(jí)鎖,行級(jí)鎖可大大提升并發(fā)時(shí)候事務(wù)處理的速度哆窿,提供了具有提交链烈、回滾和崩潰恢復(fù)能力的事務(wù)安全,查詢(xún)速度慢
原博地址:https://github.com/xianyunyh/PHP-Interview/blob/master/Mysql/%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8E.md
數(shù)據(jù)庫(kù)優(yōu)化
-- 查詢(xún)sql優(yōu)化更耻,少用子查詢(xún)测垛,盡量join;少用like秧均;分頁(yè)查詢(xún)limit食侮;需要什么字段查什么字段,少用select *目胡;拆分大的insert.delete锯七;
-- 善用索引,在group by ,orderby誉己,where, on這些字段建索引眉尸,加快查詢(xún)速度;在數(shù)據(jù)類(lèi)型小的字段加索引;
-- 表結(jié)構(gòu)的數(shù)據(jù)類(lèi)型選擇,多用not null,盡量避免null數(shù)據(jù)噪猾;根據(jù)數(shù)據(jù)選擇最適用的數(shù)據(jù)類(lèi)型霉祸;使用合理的定長(zhǎng)數(shù)據(jù)類(lèi)型,固定長(zhǎng)度的會(huì)節(jié)約資源袱蜡,查詢(xún)的時(shí)候快一點(diǎn)丝蹭,多使用char.enum,而不是varchar
-- 使用命令分析:explain分析sql,查看數(shù)據(jù)庫(kù)慢查詢(xún)速度 show status like 'slow_queries','connections','com_select','uptime',
-- 分庫(kù)分區(qū)分表,主從哭坪蚁,讀寫(xiě)分離
分表:垂直分表,針對(duì)表列數(shù)比較多的表奔穿,將常用與不常用的字段列分開(kāi),數(shù)據(jù)大的獨(dú)立出來(lái)
水平分表, 表結(jié)構(gòu)一致,可以通過(guò)加日期后綴來(lái)存儲(chǔ)不同時(shí)期的數(shù)據(jù)敏晤,服務(wù)端使用數(shù)據(jù)的時(shí)候贱田,通過(guò)當(dāng)前業(yè)務(wù)情況來(lái)操作使用那張表。也可以通過(guò)數(shù)據(jù)的不同類(lèi)型分表嘴脾,按板塊結(jié)構(gòu)分表