SQL裡同樣字串字段,內容是全中文或者全字母或者全數字,查詢速度會有區別嗎?

時間 2021-05-10 01:08:48

1樓:野鴿知了

這裡以 MySQL 資料庫來說,這裡用的字串型別的字段,比如 VARCHAR(30),代表的是可以存放 30 個滿足字符集型別的字元,因為可以存中文漢字,所以假設用的是 UTF8 字符集儲存,那就可以儲存 30 個漢字,也可以儲存 30 個英文,但是注意,在 UTF8 字符集裡,乙個漢字占用 3 個位元組,乙個英文只要占用 1 個位元組,所以都儲存漢字和都儲存英文還是有區別的,占用儲存空間的大小就不一樣。

知道這一點,再來說說索引,在 MySQL 裡,索引其實就是一顆由 B+ 樹結構的資料頁組成,且乙個資料頁預設為 16KB,所以如果在 city 欄位上建立索引,字段占用空間不同,就會有不同的資料頁,比如 city 欄位都儲存中文,則占用的空間更多,每個資料頁儲存的記錄就少,就需要有更多的資料頁來儲存索引記錄,那麼查詢的時候可能會讀取跟多的資料頁,肯定也需要更多的時間。

如下圖所示(注:這裡只是畫個簡單的圖說明下,真正的結構不是這樣的),圖中藍色表示索引記錄,橙色表示資料頁。

所以,如果資料量不大,不會有太大的區別,資料量很大的話,還是會有區別的。另外如果了解索引的組成,最好不要在大字段上建立索引。

2樓:趙偉

乙個中文字元需要2-4個位元組,依照不同字元編碼而已。

同樣字元個數,不同編碼的字串,db處理效能雖然有區別,但通常這點區別可以忽略不計。

做索引key並且長度比較長的話,效能會有比較明顯的區別,因為中文索引key意味著幾倍的長度增長,索引效率會降低

3樓:ccitt

首先明確下如果city這個字段以上這些混存用的都是varchar型別的話檢索速度是沒什麼區別的,如果想優化速度檢索快,可以考慮把city欄位改成數字型別比如smallint並將所有城市做數位化對映儲存,即使在無索引情況下檢索速度會比用varchar型別至少快3倍。具體原因簡單說就是數字型別占用空間小,而且沒有字串的編碼和排序規則比對速度更簡單更快。

4樓:零五

先說結論,大致沒有區別

如果該欄位沒有建索引,那麼會直接走全表掃瞄,也就是去硬碟上去找資料,那麼單條記錄占用空間較小的查詢速度會較快,因為磁頭尋道的時間會變短,就算是中文每個至少佔2個位元組,而英文本母和數字只佔乙個位元組,但終歸是位元組完全匹配查詢,所以中文,英文,數字沒什麼區別,只有一點要注意,也就是單條記錄的大小要盡量小於硬碟的扇區大小,這樣在讀取單條記錄的時候,磁頭才不會去多個扇區去查詢資料。但這跟題主的問題沒啥關係。

如果該字段建了索引,那麼區別其實還是幾乎沒有,英文和數字都是單個位元組,但中文就有點區別了,原因還是因為中文至少佔兩個位元組,但查詢B+樹的時候還是乙個乙個位元組找過去,考慮到B+的特性就是從根到葉所遍歷的層數是一致的,所以題主所寫的匹配查詢也是沒什麼區別。

所以就是沒區別,以上完全為了湊字數。

5樓:樹懶學堂

基本沒區別,計算機底層對不同資料型別的分解不一樣,但效率上來說不會有太大的差別。

並且,如果是為了提公升查詢效率,建議利用索引來實現。而在索引方面,中文和數字在查詢速度上的區別會更加小,基本可以忽略。

下面簡單介紹一下索引的概念:

實際上,索引也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄。

使用索引固然有好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點

雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要儲存資料,還要儲存一下索引檔案。

建立索引會占用磁碟空間的索引檔案。

Java比較字串?

尚矽谷鐵粉 public class exHashSet 建立乙個長度是100的字串陣列,使用長度是2的隨機字元填充該字串陣列,統計這個字串陣列裡重複的字串有多少種 public static void main String args 有多少重複的字串 int flag 0 放重複的字串 List...

JSON 指的是字串還是物件?

不像方應航說的是語言 就是一種格式 notation csv也是一種notation。json主要解決的問題是將object序列化,用於rpc傳輸時候的需要。不過這種格式的儲存銷量不是很高。 威斯汀布魯克 JSON在Python裡面就是字串。這個字串經過Python能處理成Python的字典等格式,...

Linux shell 程式設計 字串null值 的 條件判斷

宋凱悅 這是我用 bash x 測試指令碼執行的過程 如果str1沒有賦值會被執行成 n 順利通過,驗證了樓上說的正確! 從shell的角度來分析指令碼的執行過程。變數會在指令碼真正執行前替換成其對應的值,那麼str1 n str1 等價於 str1 n 條件測試 n 相當於test n,bash的...