<MySQL>何時使用普通索引,何時使用唯一索引

如果能夠保證業務代碼不會寫入重復數據,就可以繼續往下看。 如果業務不能保證,那么必須創建唯一索引。

關于查詢能力

普通索引和唯一索引在查詢能力上是沒有很大差別的。
如:select id from T where k=5
1、普通索引查找到滿足條件的第一個記錄(5,500)后需要查找下一個記錄,直到碰到第一個不滿足k=5條件的記錄。
2、對于唯一索引,由于索引定義了唯一性,查找到第一個滿足條件的記錄后,就會停止搜索。

InnoDB的數據按照數據頁來讀寫,每一個數據頁大小默認為16KB.
對于普通索引來說,查找k=5的記錄,該記錄所在的數據頁都在內存里,無非就是多做一次
查找與判斷下一條記錄的操作。
當然,如果剛好k=5這個記錄在數據頁的最后一行,那么就得讀取下一個數據頁,這個會稍微復雜一點。

關于change buffer

需要更新一個數據頁時,如果數據頁在內存中就直接更新。
如果這個數據頁在磁盤中,InnoDB會將這些更新操作緩存在change buffer中,這樣就不需要從磁盤中讀這個數據頁了。
在下次查詢需要訪問這個數據頁的時候,將數據頁讀入內存,然后執行change buffer中的關于這個頁的操作。
change buffer 優點:
將更新操作先記錄到change buffer ,減少讀磁盤,語句執行速度會提升。
數據讀入內存會占用buffer pool,使用change buffer可以避免占用內存,提高內存利用率
change buffer 缺點:
1、唯一索引的更新不能使用change buffer
2、change buffer的主要目的就是將記錄變更動作緩存下來,在一個數據頁merge之前,change buffer上記錄越多,收益越大
如果一個業務的更新模式是寫入后馬上做查詢,這樣不會減少IO訪問,反而增加了change buffer的維護代價。

關于寫能力(基于change buffer)

普通索引在不需要立即讀時候可以很好的應用change buffer,所以大部分場合建議使用普通索引。
如果在更新之后,馬上伴隨這個記錄拆線呢,那么建議關閉change buffer。
redo log 主要節省的是隨機寫磁盤的IO消耗,change buffer 主要節省的則是隨機讀磁盤的IO消耗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377247.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377247.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377247.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Web版OutLook,利用POP接收郵件服務器郵件

一直想做一個Web版的OutLook,所以才萌生這個想法,其實以前也接觸過這方面的東西。于是上網找了找,漫天的都是Jmail來接收,好吧,既然大家都在用我也就下載下來試試了。 什么,怎么總是報錯呢?原來…

abs std::abs_ABS的完整形式是什么?

abs std::absABS:防抱死制動系統 (ABS: Anti-lock Braking System) ABS is an abbreviation of the Anti-lock Braking System. It is a safety anti-skid braking system that is used on a variety of aircraft, automobiles and other land vehicles, such as mo…

ubuntu 使用

shell 命令歷史搜索 : ctrl r使能 session 選擇界面:安裝gnome-session-fallback安裝lwqq轉載于:https://www.cnblogs.com/JonnyLulu/p/3600263.html

漢字速查使用方法簡介

《漢字速查》(HanziSearcher)是一個支持全漢字字典和詞典的檢索工具。其界面如下所示。 界面上方為工具欄。 左方為字典和詞典檢索欄。 右方在啟動時顯示版權信息和作者的聯系方式,在執行檢索時,顯示檢索結果。 檢索方法 漢字速查…

android jni示例_Android服務示例

android jni示例A service is a component that runs in the background for supporting different types of operations that are long running. The user is not interacted with these. These perform task even if application is destroyed. Examples include handling of…

《MySQL——選錯索引,該如何做》

如果不斷地刪除歷史數據和新增數據,MySQL有時會選錯索引。 選擇索引是優化器的工作,優化器優化時會考慮的因素:掃描行數、是否需要排序、是否使用臨時表 MySQL通過統計索引上的基數,作為索引的區分度。 統計方法時采樣統計&#x…

LPWSTR 類型的實參與const.char *類型形參不兼容

CString csPlus; CString csSummand; m_PlusNumber.GetWindowTextW(csPlus); m_Summand.GetWindowTextW(csSummand); int nPlus atoi(csPlus.GetBuffer(0)); //將編輯框文本轉換成整數// int nPlus atoi(strcpy(csPlus.GetBuffer(10),"aa")); csPlus.ReleaseBu…

空間換時間,把遞歸的時間復雜度降低到O(2n)

遞歸算法的時間復雜度除非只有前兩項,否則都不是線性的,并且相當耗費內存。我們用最常見的的fibonacci數列來說明: function fibonacci(n){if( n 0 || n 1){return n;} else {return fibonacci(n - 1) fibonacci(n - 2);} } 這是一種最常見…

scala char_Scala中的Char數據類型

scala charScala Char數據類型 (Scala Char Data Type) Character (char) in Scala is a data type that is equivalent to 16-bit unsigned integer. The character data type stores a single character. It can be an alphabet, numbers, symbols, etc. The character takes…

《MySQL——給長字符串加索引》

對于長字符串,可用如下方式建立索引: (1)前綴索引 (2)字符串倒敘前綴索引 (3)添加hash字段并在hash字段上加索引 (4)字段拆分(一個字段可拆分為兩…

[藍橋杯歷屆試題] 歐拉與雞蛋

大數學家歐拉在集市上遇到了本村的兩個農婦,每人跨著個空籃子。她們和歐拉打招呼說兩人剛剛賣完了所有的雞蛋。 歐拉隨便問:“賣了多少雞蛋呢?” 不料一個說:“我們兩人自己賣自己的,一共賣了150個雞蛋,雖然…

Python元組練習

Here, we are covering following Python tuple exercises, 在這里,我們將介紹以下Python元組練習 , Creating & printing a tuple 創建和打印元組 Unpacking the tuple into strings 將元組解包成字符串 Create a tuple containing the letters of…

傻瓜教你看清MVC內部執行流程之ViewData數據傳輸,輕松學MVC--①目了然篇(待續)

1.首先在執行到Controller里面的action(方法)時,執行到最后會調用一個View()-->此方法是Controller的一個方法 源代碼: View Code protected internal ViewResult View(){return View(null /* viewName */, null /* masterName */, null /* model */);} 2.然后繼續調用自己…

《MySQL——count()邏輯》

count()用法 count()語義:該函數為一個聚合函數,對于返回的結果集一行行地判斷,如果count函數地參數不是NULL,累計值就加1,否則不加。最后返回累計值。 所以count(*),count(主鍵id)和count(1)都表示返回滿足條件地結果…

phpmailer 發送郵件

<?php /* 可用新浪和網易郵箱測試成功&#xff0c;但QQ不成功&#xff01; 下載 phpmailer 解壓 http://phpmailer.worxware.com/要注意郵件服務器的端口號&#xff0c;默認是 25 不用修改&#xff0c;如果不是則要修改如下&#xff0c;在$mail->IsSMTP() ;下一行加上 $…

靜態負載均衡和動態負載均衡_動態負載平衡

靜態負載均衡和動態負載均衡動態負載平衡 (Dynamic Load Balancing) The algorithm monitors changes on the system workload and redistributes the work accordingly. 該算法監視系統工作負載的變化并相應地重新分配工作。 This algorithm works on three strategies: 該算…

poj 1088

題目&#xff1a;http://poj.org/problem?id1088 記憶化搜索&#xff0c;dp[r][c] max(dp[r - 1][c] , dp[r 1][c] , dp[r][c - 1] , dp[r][c 1]) 1 ( if (題目給的條件滿足&#xff09;&#xff09; View Code 1 using namespace std;2 typedef long long ll;3 const in…

《MySQL——order by邏輯(全字段排序與rowid排序)》

創建一個表&#xff0c;然后使用查詢語句&#xff1a; 查詢城市是“杭州”的所有人名字&#xff0c;并且按照姓名排序返回前 1000 個人的姓名、年齡 create table t (id int(11) not null,city vachar(16) not null,name vachar(16) not null,age vachar(16) not null,addr va…

ruby 生成哈希值_哈希== Ruby中的運算符

ruby 生成哈希值In the last article, we have seen how we can compare two hash objects with the help of < operator? "<" method is a public instance method defined in Rubys library. 在上一篇文章中&#xff0c;我們看到了如何在<運算符的幫助下…

HTML5 video

摘要&#xff1a;本文主要介紹HTML5 video在android2.2中實現的主要架構和程序流程。 一、實現HTML5 video主要的類 1&#xff0e; 主要類結構及介紹 圖1中綠色類為java類&#xff0c;其余為c類&#xff0c;下面是各個類的具體介紹: (1) HTMLElement類不是最上層類&#xff0c…