資料庫基礎 day65

2021-08-20 20:22:32 字數 2754 閱讀 4127

索引的存在就是為了快速的提供查詢,

它為我們的表資料,建立了乙個資料結構,這個資料結構是單獨儲存的,

不過這個快速是對查詢而言的,

單列索引分為:

1.普通索引,僅僅是加速查詢

2.唯一索引,不僅可以加速,而且通過unique來約束唯一,可以為空

3.主鍵索引,加速查詢+主鍵

聯合索引(即多列索引):

create index 索引名 on 表名(列名1,列名2...)

按照索引的底層機制分為:

1.hash索引

單條資料查詢速度快,

但是由於hash值的無序特點,所以對於》 < like等篩選查詢不一定快,

2.二叉樹索引,

b+樹,層數越多,資料量指數級增長(我們用的就是這個,因為innodb預設支援的就是這個)

接下來,我們開始實際建立索引,

普通索引的建立,

create index 索引的名字 on 表名(列名); //這裡若你的表資料很多,這個索引的建立需要好幾秒,幾秒已經很長了!!!

drop index 索引的名字 on 表名 //最後沒有列名,這個過程很快,

唯一索引的建立和普通索引很相似,

create unique index 索引名 on 表名(列名);

drop index 索引名 on 表名; //注意刪除沒有unique!!!

關鍵字索引的建立,

!!!首先你得和關鍵字做個區別,這種建立預設不包含not null,如果需要的話,你得在字段定義的時候就寫上,

!!!其次,它只能建立乙個,否則會報multiple primary key defined.

!!!最後它的建立語法和前面兩個不太一樣,

alter table 表名 add primary key;

alter table 表名 drop primary key; //注意它們都沒有起名字,並且這個而刪除需要的時間蠻多,14.53秒了!!!

組合索引,這個索引建立出來的資訊,用show index from xx;比前面的不一樣.

create index 索引名 on 表名(列名1,列名2);

建立300w條資料,使用了1小時3分鐘

索引名詞,分覆蓋索引和索引合併,感覺沒什麼要說的,不明白再來看吧,

about覆蓋索引,直接在索引檔案中獲取資料,注意是區分索引檔案和資料表檔案,

about索引合併,就是多個單列索引通過and等方式合併使用,

這裡有個比較新的概念,你自己想不出來的,!!!即正確使用索引,

1.建立索引,ps:不用多說

2.命中索引,即你要使用你所定義的索引,這個好理解,

3.正確使用索引,ps:這個重要,因為如果你不滿足一些使用條件,就起不到索引快速查詢的功能

來聊聊3中的各種條件:

1.當where中的條件有沒有建立索引的,索引會失效,

2.如果列是字串型別,傳入條件得用雙引號,

3.還有幾個沒寫,

關於前面提到的組合索引,注意與索引合併的區分,ps:前者效率高於後者,

when use 組合索引的時候,有個最左字首匹配的原則,我用一句話總結:就是where之後的判斷條件如果使用組合中的字段,那麼第乙個必須是組合索引的第乙個字段,

about執行計畫,一句話形容,就是評估sql語句的效能,一般是dba的事,

使用方法:explain 查詢語句;

//然後就會列印相關資訊,這些引數資訊沒法簡短解釋清楚,自己看部落格吧,這裡不寫了,

慢日誌查詢,說白了,就是對你認為慢的語句進行記錄,下面的操作還可以通過配置檔案的方式實現,

about分頁效能優化,

當你使用select * from userinfo limit 0,10;這種方式查詢多條記錄的時候,

隨著資料往後,因為全文掃瞄的特點,你的這個耗時就越長,

優化的方式:

select * from userinfo where id > 20010 limit 10; //加了乙個id的判斷,就不用乙個乙個的遍歷了,

上面是一頁一頁的檢視,那如果你要跳頁看,就這樣寫,

select * from userinfo where id in(

select id from

(select * from userinfo where id > 20010 limit 40)

as a order by id desc limit 10

);ps:以一頁10條記錄的話,40代表你可以翻頁的範圍是40/10=4,

這裡有個情況要說下,就是如果你的資料增加或者刪除了,那麼再通過id來查詢,就會出些問題,這裡先留個伏筆,

資料庫基礎 day60

以前,我們直接把資料儲存在本地的乙個檔案中,最大的乙個缺點就是它是單機的,無法共享,於是出現了資料庫,今天我們學習的是mysql關聯式資料庫,所謂關係,直觀理解就是一堆表,ps 那什麼是非關係型資料庫?直觀理解就是,資料的儲存是以鍵值對的方式儲存的,mysql是乙個基於socket編寫的c s架構的...

資料庫基礎 day61

about storage engines,目前,你得知道我們目前使用的是innodb,建立不同引擎的表,生成的檔案會有些特點,這裡暫時不寫,select可以查詢表中的資料,desc t1,是檢視表的結構資訊,show create table t1 g 可以更詳細的檢視表的結構資訊,複製表,表結構...

day45 資料庫基礎

目錄4 日期型別 5 列舉和集合型別 不同的儲存引擎對應著不同的對資料的處理機制 mysql主要的儲存引擎 myisam memory blackhole 用 測試不同引擎的區別 檢視所有的儲存引擎 不同的儲存引擎在儲存表的時候 異同點 結果 對每個表新增乙個資料可以看到除了blackhole引擎,...