
文章插圖
1.非聚簇索引一定會(huì)回表查詢嗎?不一定,這涉及到查詢語(yǔ)句所要求的字段是否全部命中了索引,如果全部命中了索引,那么就不必再進(jìn)行回表查詢 。
舉個(gè)簡(jiǎn)單的例子:假設(shè)我們?cè)趩T工表的年齡上建立了索引,那么當(dāng)進(jìn)行的查詢時(shí),在索引的葉子節(jié)點(diǎn)上,已經(jīng)包含了age信息,不會(huì)再次進(jìn)行回表查詢.
selectagefromemployeewhereage <202.Mysql刪除表幾種方式?有什么區(qū)別?delete : 僅刪除表數(shù)據(jù),支持where條件過(guò)濾,支持回滾 。記錄日志 。因此比較慢 。delete from links;truncate: 僅刪除所有數(shù)據(jù),不支持where條件過(guò)濾,不支持回滾 。不記錄日志,效率高于delete 。truncate table links;drop:刪除表數(shù)據(jù)同時(shí)刪除表結(jié)構(gòu) 。將表所占的空間都釋放掉 。刪除效率最高 。drop table links;3.MySQL自增id不連續(xù)問(wèn)題?唯一鍵沖突 假設(shè)執(zhí)行 SQL 的時(shí)候 user 表 id = 10,此時(shí)在內(nèi)存中的自增 id 為11,此時(shí)發(fā)生唯一鍵沖突寫(xiě)庫(kù)失敗,則 user 表沒(méi)有 id = 10 這條記錄,之后 id 從11開(kāi)始寫(xiě)入,因此 id 是不連續(xù)的 。事務(wù)回滾 假設(shè)同時(shí)需要對(duì) user、staff 表進(jìn)行寫(xiě)庫(kù)操作,執(zhí)行 SQL 的時(shí)候 user 表 id = 10,此時(shí)在內(nèi)存中的自增 id 為11;staff 表 id = 20,此時(shí)內(nèi)存中的自增 id 為21,一旦事務(wù)執(zhí)行失敗,事務(wù)回滾,寫(xiě)庫(kù)失敗,則 user 表沒(méi)有 id = 10 這條記錄,staff 表沒(méi)有 id = 20 這條記錄,user 表從11開(kāi)始寫(xiě)入,staff 表從21開(kāi)始寫(xiě)入,如此產(chǎn)生 id 不連續(xù)的現(xiàn)象 。批量寫(xiě)庫(kù)操作 對(duì)于批量插入數(shù)據(jù)的語(yǔ)句,MySQL 有一個(gè)批量申請(qǐng)自增 id 的策略: 1. 語(yǔ)句執(zhí)行過(guò)程中,第一次申請(qǐng)自增 id,會(huì)分配 1 個(gè);2. 1 個(gè)用完以后,這個(gè)語(yǔ)句第二次申請(qǐng)自增 id,會(huì)分配 2 個(gè); 3. 2 個(gè)用完以后,還是這個(gè)語(yǔ)句,第三次申請(qǐng)自增 id,會(huì)分配 4 個(gè); 依此類推,同一個(gè)語(yǔ)句去申請(qǐng)自增 id,每次申請(qǐng)到的自增 id 個(gè)數(shù)都是上一次的兩倍 。假設(shè)批量往 user 表中寫(xiě)入四條記錄,則這四條記錄將分為三次申請(qǐng)id,第一次分配到 id = 1,第二次分配到 id = 2、3,第三次分配到 id = 4、5、6、7,當(dāng)批量寫(xiě)入四條記錄之后,id = 1、2、3、4將會(huì)入庫(kù),但是 id = 5、6、7就被廢棄了,下一個(gè) id 從8開(kāi)始 。4.選擇合適的存儲(chǔ)引擎?在選擇存儲(chǔ)引擎時(shí),應(yīng)根據(jù)應(yīng)用特點(diǎn)選擇合適的存儲(chǔ)引擎,對(duì)于復(fù)雜的應(yīng)用系統(tǒng)可以根據(jù)實(shí)際情況選擇多種存儲(chǔ)引擎進(jìn)行組合 。
下面是常用存儲(chǔ)引擎的適用環(huán)境 。
MyISAM:5.1及之前版本默認(rèn)存儲(chǔ)引擎 。如果應(yīng)用是以讀操作和插入操作為主,=只有很少的更新和刪除操作,并且對(duì)事務(wù)的完整性、并發(fā)性要求不是很高,那么選擇這個(gè)存 儲(chǔ)引擎是非常適合的 。MyISAM 是在 Web、數(shù)據(jù)倉(cāng)儲(chǔ)和其他應(yīng)用環(huán)境下最常使用的存儲(chǔ)引擎 之一 。InnoDB:5.5及之后默認(rèn)存儲(chǔ)引擎 。用于事務(wù)處理應(yīng)用程序,支持外鍵 。如果應(yīng)用對(duì)事務(wù)的完整性有比較高的要求,在并發(fā)條件下要求數(shù)據(jù)的一致性,數(shù)據(jù)操作除了插入和查詢以外,還包括很多的更新、 刪除操作,那么 InnoDB 存儲(chǔ)引擎應(yīng)該是比較合適的選擇 。InnoDB 存儲(chǔ)引擎除了有效地降低 由于刪除和更新導(dǎo)致的鎖定,還可以確保事務(wù)的完整提交(Commit)和回滾(Rollback),對(duì)于類似計(jì)費(fèi)系統(tǒng)或者財(cái)務(wù)系統(tǒng)等對(duì)數(shù)據(jù)準(zhǔn)確性要求比較高的系統(tǒng),InnoDB 都是合適的選 擇 。MEMORY:將所有數(shù)據(jù)保存在 RAM 中,在需要快速定位記錄和其他類似數(shù)據(jù)的環(huán)境 下,可提供極快的訪問(wèn) 。MEMORY 的缺陷是對(duì)表的大小有限制,太大的表無(wú)法 CACHE 在內(nèi)存中,其次是要確保表的數(shù)據(jù)可以恢復(fù),數(shù)據(jù)庫(kù)異常終止后表中的數(shù)據(jù)是可以恢復(fù)的 。MEMORY 表通常用于更新不太頻繁的小表,用以快速得到訪問(wèn)結(jié)果 。MERGE:用于將一系列等同的 MyISAM 表以邏輯方式組合在一起,并作為一個(gè)對(duì)象引用它們 。MERGE 表的優(yōu)點(diǎn)在于可以突破對(duì)單個(gè) MyISAM 表大小的限制,并且通過(guò)將不同 的表分布在多個(gè)磁盤(pán)上,可以有效地改善MERGE表的訪問(wèn)效率 。這對(duì)于諸如數(shù)據(jù)倉(cāng)儲(chǔ)等VLDB 環(huán)境十分適合 。5.選擇合適的數(shù)據(jù)類型?前提: 使用適合存儲(chǔ)引擎 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 武漢長(zhǎng)江大橋漢陽(yáng)橋頭電梯開(kāi)了嗎2021
- 成都有山姆超市嗎
- 2021拼搏勵(lì)志語(yǔ)錄(關(guān)于2021拼搏勵(lì)志語(yǔ)錄
- 京東2021雙十一活動(dòng)幾號(hào)開(kāi)始幾號(hào)結(jié)束
- 2021肯德基萬(wàn)圣節(jié)海綿寶寶玩具有幾款
- 2021年春分是幾月幾日 春分是立春?jiǎn)?
- 2021年全國(guó)取消禁摩令 摩托車京a牌照多少錢(qián)
- 健身教練證怎么考 樂(lè)刻健身教練培訓(xùn)多少錢(qián)
- 2021單人玩職業(yè)推薦 暗黑3攻略心得
- 考試成績(jī)猜一個(gè)數(shù)學(xué)名詞 成績(jī)是多少打一數(shù)字
