mysql 幾選一 MySQL 請選擇合適的列

2021-10-18 20:55:31 字數 2217 閱讀 8089

字串型別

1、varchar

(1)儲存可變長字串。

理解:比固定長度占用更少的儲存空間,因為它只占用自己需要的空間。例外情況:使用row_format=fixed建立的myisam表,它為每行使用固定長度的空間,可能會造成浪費。

(2)儲存長度資訊。如果定義的列小於或等於255,則使用1個位元組儲存長度值,假設使用latin1字符集,如varchar(10)將占用11個位元組的儲存空間。反過來,varchar(1000),則占用1002個位元組的儲存空間。

(3)節約空間,對效能有幫助。

(4)5.0版本以上,無論是取值還是儲存,mysql都會保留字串末尾的空格。

只分配真正需要的空間

使用varchar(5)和varchar(200)儲存'hello'占用空間是一樣的。——這裡應該指的是磁碟上的空間。

那麼使用較短列有何優勢?——巨大的優勢

較大的列會使用更多的記憶體,因為mysql通常會分配固定大小的記憶體塊(如varchar(200)會用200個字元大小的記憶體空間)來儲存值(然後對值進行trim操作,最後放入磁碟)或取值。——這對排序或使用基於記憶體的臨時表尤其不好。

(1)固定長度。

(2)儲存值時,去掉末尾的空格。

(3)char常用於很短字串或長度近似相同的字串的時候很有用。如儲存使用者密碼的md5雜湊值,它的長度總是一樣的。

char優於varchar的地方?

1>> 對於經常改變的值,char優於varchar,因為固定長度行不容易產生碎片。——當最長長度遠大於平均長度,並且很少發生更新的時候,通常適合使用varchar。

2>>對於很短的列,char的效率也是高於varchar的。如對於單位元組字符集(如latin1),char(1)只會占用1個位元組,而varchar(2)會占用2個位元組(有乙個位元組用來儲存長度的資訊)。

用於儲存大量資料。

(1)innodb在它們較大的時候會使用「外部」儲存區域來進行儲存。——所以需要足夠的外部儲存空間來儲存實際的值。

(2)排序方式不同於其他字元型別,不會按照完整長度進行排序,而只是按照max_sort_length規定的前若干個位元組進行排序。

4、使用enum代替字串型別

(1)enum列可以儲存65 535個不同的字串。

(2)以緊湊方式儲存。根據列表中值的數量,把它們壓縮到1到2個位元組中。

(3)mysql在內部把每個值都儲存為整數,以表示值在列表中的位置。

(4)保留了乙份「查詢表」,來表示整數和字串在表的.frm檔案中的對映關係。

(5)enum字元列是固定的,新增、刪除字串須使用alter table。

(6)使用案例:許可權表中使用enum來儲存y值和n值。

使用方法:

在對enum列使用order by的時候,是按數字排序的,而不是字串排序。

日期和時間型別

datetime:儲存大範圍的值。封裝格式:yyyymmddhhmmss。——與時區無關,使用8位元組儲存空間。

timestamp:儲存自2023年1月1日午夜(格林尼治標準時間)以來的秒數。——使用4位元組儲存空間。

通常使用timestamp,它比datetime更節約空間。有時人們把unix的時間戳儲存為整數值,但是這通常沒有任何好處。——這種格式處理起來不太方便,我們並不推薦它。

mysql選乙個排序最小的 mysql排序區別

由淺入深詳細說說mysql排序模式,怎麼影響mysql選擇不同的排序模式和怎麼優化排序。排序是資料庫中的乙個基本功能,mysql也不例外。使用者通過order by語句即能達到將指定的結果集排序的目的,其實不僅僅是order by語句,group by語句,distinct語句都會隱含使用排序。本文...

mysql列表隨機選資料 從MySQL隨機選取資料

從mysql隨機選取資料 2014 06 23 從mysql隨機選取資料最簡單的辦法就是使用 order by rand 方案一 select from table order by rand limit 0,1 這種方法的問題就是非常慢。原因是因為mysql會建立一張零時表來儲存所有的結果集,然後...

mysql如何選擇隨機行 使用MySQL選擇隨機行

偶然的你 order by rand 如您所知,大多數人推薦的解決方案無法擴充套件到大型表。set r select floor rand select count from mytable set sql concat select from mytable limit 1 offset r pr...