MySQL 索引與資料型別

2021-09-28 15:17:02 字數 2396 閱讀 4960

在資料庫的查詢操作中,為了提高資料查詢的效率引入了索引的概念。其中,實現索引有幾種不同的方式:雜湊表、有序陣列、搜尋樹等。

雜湊表

把資料庫中的值放在陣列中,採用雜湊演算法把key對映到乙個確定的位置,然後把value放在陣列的這個位置。當發生衝突時,採用鍊錶法解決。

缺點:只能由於等值查詢無法實現範圍查詢。

有序陣列

把資料庫中的值放在乙個有序陣列中,查詢用二分法,時間複雜度:o(log(n))

缺點:更新資料庫時需要的操作太多,效率低。

搜尋樹

每個結點的左子樹的值小於父節點,右子樹的值大於父節點,查詢時間複雜度:o(log(n)),更新時間複雜度:o(log(n))。

缺點:樹的高度過高時,時間成本還是很高。

值索引:在mysql語法中,使用where比較查詢值相同的索引。

mysql的索引內部實現採用的是b+樹這種資料結構,其中

b tree 指的是 balance tree,也就是平衡樹。平衡樹是一顆查詢樹,並且所有葉子節點位於同一層。

b+ tree 是基於 b tree 和葉子節點順序訪問指標進行實現,它具有 b tree 的平衡性,並且通過順序訪問指標來提高區間查詢的效能。

全文索引:在mysql語法中,使用match against查詢文中的關鍵字而不是直接比較是否相等。

myisam 儲存引擎支援全文索引, innodb 儲存引擎在 mysql 5.6.4 版本中也開始支援全文索引。

雜湊索引: 雜湊索引能以 o(1) 時間進行查詢,但是失去了有序性 。

innodb 儲存引擎有乙個特殊的功能叫「自適應雜湊索引」,當某個索引值被使用的非常頻繁時,會在 b+tree 索引之上再建立乙個雜湊索引,這樣就讓 b+tree 索引具有雜湊索引的一些優點,比如快速的雜湊查詢。

多列索引: 在需要使用多個列作為條件進行查詢時,使用多列索引比使用多個單列索引效能更好。

索引列的順序: 讓選擇性最強的索引列放在前面。

字首索引: 對於 blob、text 和 varchar 型別的列,必須使用字首索引,只索引開始的部分字元 。

覆蓋索引: 覆蓋索引包含所有需要查詢的字段的值

innodb 的 b+tree 索引分為主索引和輔助索引。 主索引的葉子節點 data 域記錄著完整的資料記錄 輔助索引的葉子節點的 data 域記錄著主鍵的值,因此在使用輔助索引進行查詢時,需要先查找到主鍵值,然後再到主索引中進行查詢。

整型

tinyint, smallint, mediumint, int, bigint 分別使用 8, 16, 24, 32, 64 位儲存空間,一般情況下越小的列越好。

int(11) 中的數字只是規定了互動工具顯示字元的個數,對於儲存和計算來說是沒有意義的 。

浮點數

float 和 double 為浮點型別,decimal 為高精度小數型別 。

float、double 和 decimal 都可以指定列寬,例如 decimal(18, 9) 表示總共 18 位,取 9 位儲存小數部分,剩下 9 位儲存整數部分。

字串

varchar 這種變長型別能夠節省空間,因為只需要儲存必要的內容。但是在執行 update 時可能會使行變得比原來長,當超出乙個頁所能容納的大小時,就要執行額外的操作。myisam 會將行拆成不同的片段儲存,而 innodb 則需要**頁來使行放進頁內。

在進行儲存和檢索時,會保留 varchar 末尾的空格,而會刪除 char 末尾的空格。

時間和日期

應該盡量使用 timestamp,因為它比 datetime 空間效率更高。

其中,datetime與時區無關,能夠儲存從 1000 年到 9999 年的日期和時間,精度為秒,使用 8 位元組的儲存空間。 預設情況下,mysql 以一種可排序的、無歧義的格式顯示 datetime值,例如「2008-01-16 22:37:08」,這是 ansi 標準定義的日期和時間表示方法。

timestamp 和時區有關,也就是說乙個時間戳在不同的時區所代表的具體時間是不同的。 儲存從 1970 年 1 月 1 日午夜(格林威治時間)以來的秒數,使用 4 個位元組,只能表示從 1970 年到 2038 年。

mysql 提供了 from_unixtime() 函式把 unix 時間戳轉換為日期,並提供了unix_timestamp() 函式把日期轉換為 unix 時間戳。預設情況下,如果插入時沒有指定 timestamp 列的值,會將這個值設定為當前時間。

Mysql索引的資料型別 原理??

索引的優點 1.通過建立唯一索引,可以保證資料庫每一行資料的唯一性 2.可以大大提高查詢速度 3.可以加速表與表的連線 4.可以顯著的減少查詢中分組和排序的時間。索引的缺點 1.建立索引和維護索引需要時間,而且資料量越大時間越長 2.建立索引需要佔據磁碟的空間,如果有大量的索引,可能比資料檔案更快達...

sql與mysql資料型別 SQL 資料型別

mysql 資料型別 在 mysql 中,有三種主要的型別 文字 數字和日期 時間型別。text 型別 資料型別描述 char size 儲存固定長度的字串 可包含字母 數字以及特殊字元 在括號中指定字串的長度。最多 255 個字元。varchar size 儲存可變長度的字串 可包含字母 數字以及...

資料型別之索引與切片

1.索引概念 2.索引獲取元素 例1 string hello,world 正序 sting 0 即對應h字元 逆序 string 12 即對應h字元 例2 food list 康師傅速食麵 酸奶 雪糕 康師傅速食麵 18 8.88,1,2,3 print food list 1 print foo...