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

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


咨詢
建站咨詢
