高效能mysql讀書筆記三

2021-08-31 10:21:53 字數 1479 閱讀 5668

架構優化和索引

1.資料型別

浮點:float和double使用的是平台的浮點數,分別占用4位元組和8位元組。decimal是表示精確的小數。

字串:varchar(255)表示最大長度255位元組,對於uft-8編碼,將不知道能保留多少字元,中文是3位元組,字母1位元組,這一點要注意。另外設高上限,因為記憶體的分配mysql是固定長度的,這樣可能會導致記憶體的浪費。另外會占用額外的1或2位元組來記錄長度。該型別的問題是修改欄位會改變行的大小,可能引起分頁。帶來額外的工作。但這個問題不是很大,因為預寫式日誌的存在。char優勢比較小了,對於固定長度的,倒是可以用一下,問題是會丟失字串後面的空格。

timestamp:從2023年1月1日到現在的秒數,占用4位元組

bit和set,都是位集,要使用的時候研究一下跟使用int有什麼區別。

ip位址用無符號整數儲存,mysql提供了inet_ation()和inet_ntoa()實現轉化,我這個專案剛好能用上。

2.索引

大部分儲存引擎都是用b-tree(乙個節點很多分支,深度一樣,為低速io和按序查詢而優化的)來實現。可以匹配全名,匹配最左字首(找到第一層小於字首的風格點和第乙個大於字首的風格點,遞迴)匹配範圍值(找到第一層最大小於下屆的和最小大於上界的,遞迴),like也可以看成乙個範圍值。比如 like ("123%" > "123" and <"124"). 這三種情況可以變成兩種。可以組合比如,key(a,b,c),索引中也是按順序儲存的, a='a'and b like 'b%',相當於abc like "ab%"可以索引 a='a' and b>"b1" and b<"b2" 相當於abc >"ab1" abc<"ab2"

like也可以看成乙個範圍值。對於多列索引,順序很重要,如果前一列使用了範圍條件,後一列的索引就不能使用了,因為mysql不知道這個範圍裡包括了多少值,無法組合出索引,所以這個時候in就特別有用,它可以是mysql知道如何組合條件使用索引。

如何select * form employee where gender>=0 and gender <=1 and birthday="1987-08-19",該錶上有索引key(gender,birthday),這種寫法會掃瞄全表,

而select * form employee where gender in (0,1) and birthday="1987-08-19"就會使用索引。這個其實優化器還可能優化,而如果gender是字串,就無從優化了。

hash索引不能處理範圍檢索。可以用索引乙個儲存hash值的列來優化索引的效能。

全文索引:通過分詞,建立乙個類似b-tree的結構。

3.索引優化:

(1).有索引的列要單獨出現在表示式的一邊,這是最簡單的,第二,表示式也最好不要有其他的變數,比如current_date,這個會影響快取。(這個也許新的版本能優化)

(2).字首索引,把字串的前面一部分用做索引,text欄位會很需要,要關注選擇性和平均性兩個指標,語法alert table table_name add key (column_name(n)).

高效能mysql讀書筆記(三)

整數型別 whole number 和 real number whole number可以使用tinyint,smallint,mediumint,int,bigint,分別占用8,16,24,42,64位。real number主要有float和double,支援浮點運算,float 和 dou...

高效能Mysql 讀書筆記(三)

本文為 高效能mysql 第三版 第四章讀書筆記,mysql版本為5.5 索引的重要性 找一本800面的書的某一段內容,沒有目錄也沒有頁碼 頁碼也可模擬是索引 對於很早的版本,一直強調 最左字首匹配,索引使用順序,不可跳過索引中的列等等,但高效能mysql一書之後的版本中對於 mysql優化器進行了...

高效能MySQL 讀書筆記

第4章 schema與資料型別優化 第5章 建立高效能的索引 三星索引 最左匹配原則 高效能索引策略 多列索引 mysql採用的是分層架構 上層是server層,下層是儲存引擎層。sql標準中定義了四種隔離級別 隔離級別 定義髒讀 不可重複讀 幻讀加鎖讀 讀未提交 read uncommitted,...