對 MySQL 的 VARCHAR 欄位使用 INDEX 時可以增加效率的方法…
在 MySQL 中,如果你有 VARCHAR(255) 這種欄位,不要對直接對這個欄位下 INDEX。因為 key 會以最大長度 255 chars 為固定大小,而非動態決定 (latin1 的時候 1 char 是 1 byte,utf8 是 3 bytes,utf8mb4 是 4 bytes),當資料有 1M row data 就直接吃掉 1MB/3MB/4MB 的空間。...
View ArticleMySQL 對 VARCHAR 的 Index 空間佔用的問題…
之前不知道從哪邊學到錯的東西… 實驗後發現搞錯了。對 MySQL 的 VARCHAR 欄位下 index 所實際佔用的空間仍是實際大小,而非最大長度。 測試方法是建立表格,schema 是 CREATE TABLE test (id INT UNSIGNED PRIMARY AUTO_INCREMENT, data VARCHAR(255)) ENGINE=InnoDB;,在...
View Article將 latin1 的表格轉換成 UTF-8 表格…
Percona 的人寫了一篇「utf8 data on latin1 tables: converting to utf8 without downtime or double encoding」,告訴你怎麼將 latin1 的 TEXT 欄位轉成 UTF-8,文章內有提到利用 BLOB 轉。 不確定同樣方式能不能做在 VARCHAR 上面 (用 BINARY 轉?),但不知道會不會有...
View ArticleMySQL 裡搜尋 CHAR/VARCHAR (String) 欄位時要注意的事情
MySQL 表格欄位是 CHAR 或 VARCHAR 時,寫搜尋條件要記得使用 string 格式,而非數字。意思是,要避免這種 SQL query: SELECT * FROM foo WHERE `column_string` = 123456; 原因是即使 column_string 加上了 B-tree index,也無法利用這個 index 加速查詢。 原因是,除了最明確的...
View ArticleInnoDB 的 BLOB field 存放的方式
這邊的 BLOB field 指的包括 VARCHAR、VARBINARY、BLOB、TEXT 這些常常被拿來放大物件的類型:「Externally Stored Fields in InnoDB」。 這跟 InnoDB 存放的格式 (ROW_FORMAT) 也有關,對於不同的格式都需要分開討論。 看之前需要帶一些背景知識,像是 Database index 裡面講到 index 種類時所提到的...
View Article
More Pages to Explore .....