字串型別
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 列的選取原則
列選擇原則 1 字段型別優先順序 整型 date,整型 浮點型,time enum,char varchar blob 列的特點分析 整型 定長,沒有國家 地區之分,沒有字符集的差異 time定長,運算快,節省空間.考慮時區,寫sql時不方便 where 2005 10 12 enum 能起來約束值...
pandas 某列查詢 選取與刪除某數
法1 迴圈比較 for x in df id if x 1 print exsit break耗時 2.8s 如果不僅僅想確認存在,還想返回下標。多用乙個enumerate,或者用range進行迴圈即可。法2 掩碼運算 不僅能確認存在,存在時還能獲得index。q mydf mydf id 1 in...
mysql動態選取列 在mysql中選擇動態列
是否可以遍歷這樣的表 mysql select from stackoverflow results id type criteria id result 1 car env 1 2 car gas 3 car age 4 bike env 1 5 bike gas 6 bike age 1 7 b...