新聞中心
并返回表兩次.因?yàn)椴樵兘Y(jié)果所需的數(shù)據(jù)只存在于主鍵索引上。
本文由創(chuàng)新互聯(lián)(www.cdcxhl.com)小編為大家整理,本文主要介紹了mySQL數(shù)據(jù)庫中怎么創(chuàng)建索引的相關(guān)知識(shí),希望對(duì)你有一定的參考價(jià)值和幫助,記得關(guān)注和收藏網(wǎng)址哦!

MySql數(shù)據(jù)庫中怎么創(chuàng)建索引?
當(dāng)滿足語句要求時(shí),訪問盡可能少的資源是數(shù)據(jù)庫設(shè)計(jì)的一個(gè)重要原則,這與執(zhí)行的SQL直接相關(guān),而索引問題是SQL問題中最常見的。常見的索引問題包括無索引(失敗)和隱式轉(zhuǎn)換.1.SQL執(zhí)行過程。看一個(gè)問題.在下面的表T中,如果我想執(zhí)行一個(gè)需要多次樹執(zhí)行的搜索操作,將掃描多少行?它們是ID字段索引樹和K字段索引樹.
這條Sql語句的執(zhí)行過程:
1.在k索引樹中找到k=3,得到ID=3002.回到ID索引樹,找到ID=300的記錄,對(duì)應(yīng)R33。在k索引樹中查找下一個(gè)值k=5,ID=5004,然后返回ID索引樹,查找ID=500的R4.
5.轉(zhuǎn)到k索引樹中的下一個(gè)值k=6。如果它不不滿足條件,循環(huán)結(jié)束.
這個(gè)過程讀取K索引樹的三條記錄,并返回表兩次.因?yàn)椴樵兘Y(jié)果所需的數(shù)據(jù)只存在于主鍵索引上,所以必須返回表.那么,如何通過優(yōu)化索引來避免回表呢?2.常用索引優(yōu)化2.1覆蓋索引覆蓋索引,換句話說,索引要覆蓋我們的查詢請(qǐng)求,不需要返回表。
如果執(zhí)行的語句是,那么因?yàn)镮D的值在K索引樹上,所以不需要返回表.
覆蓋索引可以減少樹搜索的次數(shù),顯著提高查詢性能,是一種常用的性能優(yōu)化手段.
但是維護(hù)索引是有代價(jià)的,所以在建立冗余索引來支持覆蓋率索引時(shí)要權(quán)衡利弊.
2.2最左側(cè)前綴原則
B樹的數(shù)據(jù)項(xiàng)是復(fù)合數(shù)據(jù)結(jié)構(gòu)。例如,B樹從左到右構(gòu)建搜索樹。當(dāng)檢索到這樣的數(shù)據(jù)時(shí)、B-樹會(huì)優(yōu)先比較名字來確定下一步的搜索方向。如果名字相同,它會(huì)依次比較性別和年齡,最后得到檢索到的數(shù)據(jù).
可以清楚的看到A1使用的是tl索引,A2掃描的是全表。雖然A2的兩個(gè)條件都出現(xiàn)在tl索引中,但是沒有使用名稱列,不符合最左前綴原則,所以索引不能使用。因此,如何對(duì)聯(lián)合索引中的字段進(jìn)行排序是關(guān)鍵.評(píng)價(jià)標(biāo)準(zhǔn)是索引的可重用性.因?yàn)橹С肿钭筮叺那熬Y,所以(a,b)的聯(lián)合索引建立后,就不需要為a建立單獨(dú)的索引了,原則上,如果通過調(diào)整順序可以少維護(hù)一個(gè)索引,那么這個(gè)順序往往是優(yōu)先的.在上面的例子中,如果查詢條件中只有B、那么聯(lián)合索引(A,B)可以不要被使用.這時(shí)候又要維護(hù)另一個(gè)索引,也就是說,(A,B))、(B)兩個(gè)索引.在這種情況下,需要考慮空間占用,比如姓名和年齡的聯(lián)合索引.姓名字段比年齡字段占用更多的空間,因此創(chuàng)建(姓名,年齡)聯(lián)合索引和(年齡)索引比創(chuàng)建(年齡,姓名)和(姓名)索引占用更少的空間.
2.3指數(shù)下推
以人員表的聯(lián)合索引(姓名、年齡)為例.現(xiàn)在,如果有需求:在表中搜索“姓名為張,年齡為26”。所以、Sql語句是這樣寫的
通過最左邊的前綴索引規(guī)則,會(huì)找到id1、然后需要判斷MySQL5.6之前是否滿足其他條件。只有id1可以用來逐個(gè)返回表.在主鍵索引上找到數(shù)據(jù)行,然后比較字段值.而MySQL5.6引入的索引條件下推可以在索引遍歷過程中先判斷索引包含的字段,直接過濾掉不包含的記錄不滿足條件,減少返回表的次數(shù)。這樣減少了返回表的次數(shù)和后期再次過濾的工作量,檢索速度明顯提高.
2.4%隱式類型轉(zhuǎn)換
隱式類型轉(zhuǎn)換的主要原因是表結(jié)構(gòu)中指定的數(shù)據(jù)類型與傳入的數(shù)據(jù)類型不同,導(dǎo)致索引不可用.所以有兩個(gè)選擇:
修改表結(jié)構(gòu)和字段數(shù)據(jù)類型.申請(qǐng)吧,將應(yīng)用程序中傳遞的字符類型更改為與表結(jié)構(gòu)相同的類型。
3.為什么選擇了錯(cuò)誤的索引3.1優(yōu)化器選擇索引,這是優(yōu)化器的工作.其目的是尋找一個(gè)最優(yōu)的執(zhí)行方案,以最小的代價(jià)執(zhí)行語句.在數(shù)據(jù)庫中,掃描行數(shù)是影響執(zhí)行成本的因素之一.掃描的行數(shù)越少,訪問磁盤數(shù)據(jù)的次數(shù)就越少,消耗的cpu資源就越少。當(dāng)然,掃描的行數(shù)不是唯一的標(biāo)準(zhǔn).優(yōu)化器還會(huì)根據(jù)是否使用臨時(shí)表以及對(duì)臨時(shí)表進(jìn)行排序等因素進(jìn)行綜合判斷.
3.2掃描線
在MySql實(shí)際開始執(zhí)行語句之前,我們可以我不知道有多少記錄符合這個(gè)條件。只能通過指標(biāo)的區(qū)分度來判斷.顯然,一個(gè)指數(shù)中的不同值越多,指數(shù)的區(qū)分度越好,一個(gè)指數(shù)中不同值的個(gè)數(shù)稱為“基數(shù)”,即基數(shù)越大,指標(biāo)區(qū)分度越好.
用MYSQL抽樣統(tǒng)計(jì)方法估計(jì)基數(shù):抽樣統(tǒng)計(jì)時(shí),InnoDB會(huì)默認(rèn)選擇N個(gè)數(shù)據(jù)頁,統(tǒng)計(jì)這些頁上的不同值,得到一個(gè)平均值,然后乘以這個(gè)索引的頁數(shù),得到這個(gè)索引的基數(shù).數(shù)據(jù)表會(huì)不斷更新,指標(biāo)統(tǒng)計(jì)不會(huì)固定.因此,當(dāng)更改的數(shù)據(jù)行數(shù)超過1/M時(shí),將會(huì)自動(dòng)再次觸發(fā)索引統(tǒng)計(jì).
在mysql中,有兩種方法存儲(chǔ)索引統(tǒng)計(jì)數(shù)據(jù),可以通過設(shè)置參數(shù)Innodb_stats_p
MySql創(chuàng)建數(shù)據(jù)庫與數(shù)據(jù)表?
開發(fā)網(wǎng)站時(shí),經(jīng)常需要使用數(shù)據(jù)庫來保存數(shù)據(jù).我們?nèi)绾蝿?chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表?其實(shí)方法很簡單.■這里如何使用Navicat for MySQL教你創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表的操作流程。工具/原材料計(jì)算機(jī)Navicat數(shù)據(jù)庫管理工具方法/步驟1.步驟1:在本地創(chuàng)建一個(gè)數(shù)據(jù)庫。首先,啟動(dòng)數(shù)據(jù)庫運(yùn)行環(huán)境.Apache和mysql都顯示綠色,表示環(huán)境啟動(dòng)成功,否則環(huán)境啟動(dòng)失敗就無法操作數(shù)據(jù)庫。
2.第二步:打開數(shù)據(jù)庫管理工具Navicat for MySQL,用于管理我們數(shù)據(jù)庫的創(chuàng)建和管理,如下圖所示:
3.第三步:打開Navicat for MySql后,在左側(cè)使用鼠標(biāo)右鍵,選擇新建數(shù)據(jù)庫。
4.第四步:進(jìn)入數(shù)據(jù)庫創(chuàng)建頁面,數(shù)據(jù)庫名稱為myxiaoze填寫字符集utf8-utf-8 unicode;;填寫utf8_General_ci作為排序規(guī)則,然后單擊確定:
5.第五步:在左側(cè)點(diǎn)擊右鍵刷新,可以看到新創(chuàng)建的數(shù)據(jù)庫,如下圖所示:
6.第六步:雙擊打開新創(chuàng)建的數(shù)據(jù)庫,點(diǎn)擊[表格],在右邊空白處點(diǎn)擊右鍵,選擇[新建表格],如圖:
7.第七步:進(jìn)入創(chuàng)建表的頁面,然后創(chuàng)建字段.設(shè)置主鍵并自動(dòng)遞增.自動(dòng)遞增的功能是每增加一條數(shù)據(jù),id就會(huì)自動(dòng)遞增,我們不我不需要輸入它。
8.第八步:按Ctrl s的同時(shí)保存數(shù)據(jù)表,并填寫數(shù)據(jù)表名稱,命名為XZ。通過以上步驟,我們可以完美的實(shí)現(xiàn)數(shù)據(jù)庫和數(shù)據(jù)表的創(chuàng)建.
如何建立MySql本地?cái)?shù)據(jù)庫?
首先,,你打開mySql數(shù)據(jù)庫的界面后,只需在命令中輸入cr怎么創(chuàng)建公司數(shù)據(jù)庫?
公司數(shù)據(jù)庫的方法步驟如下::登錄MySQL mySQL-u根-p你的密碼顯示數(shù)據(jù)庫;
2.
創(chuàng)建一個(gè)MySql創(chuàng)建數(shù)據(jù)庫公司,命名為公司數(shù)據(jù)庫;//選擇數(shù)據(jù)庫。如果數(shù)據(jù)庫名稱有誤,可以取消:mysql再降數(shù)據(jù)庫公司;
3.
在公司數(shù)據(jù)庫中創(chuàng)建一個(gè)用戶數(shù)據(jù)表,并創(chuàng)建四個(gè)字段:ID、姓名、性別和信息。Mysqluse公司;mySQL創(chuàng)建表用戶(id int,姓名字符(20),性別字符(24),信息字符(36));如果數(shù)據(jù)庫名稱錯(cuò)誤,您可以刪除它并重新構(gòu)建它。Mysql刪除表用戶
網(wǎng)站標(biāo)題:MySql數(shù)據(jù)庫中怎么創(chuàng)建索引?(MySql創(chuàng)建數(shù)據(jù)庫與數(shù)據(jù)表?)
當(dāng)前地址:http://m.5511xx.com/article/cdjcphc.html


咨詢
建站咨詢
