亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入研究mysql中的varchar和limit(容易被忽略的知識)

 更新時間:2015年03月10日 08:58:35   投稿:junjie  
這篇文章主要介紹了深入研究mysql中的varchar和limit(容易被忽略的知識),本文探究了varchar(5)可以存儲多少個漢字、多少個字母數(shù)字和mysql中的limit你真的會用嗎兩個知識點,需要的朋友可以參考下

為什么標題要起這個名字呢?commen sence指的是那些大家都應該知道的事情,但往往大家又會會略這些東西,或者對這些東西一知半解,今天我總結下自己在mysql中遇到的一些commen sense類型的問題。

  1、varchar(5)可以存儲多少個漢字,多少個字母數(shù)字?

  相信有好多人應該跟我一樣,對這個已經(jīng)很熟悉了,根據(jù)經(jīng)驗我們能很快的做出決定,比如說用varchar(200)去存儲url等等,但是,即使你用了很多次也很熟悉了,也有可能對上面的問題做出錯誤的回答。

  這個問題我查了好多資料,有的人說是可以存儲5個字符,2.5個漢字(每個漢字占用兩個字節(jié)的話),有的人說這個要區(qū)分版本,5.0是個分界限,5.0之前是前面說的那樣,5.0之后是可以存儲5個“字”,不區(qū)分是數(shù)字、英文、漢字,果真是這樣嗎,我們來做個實驗:

復制代碼 代碼如下:

CREATE TABLE `test` (
  `name` varchar(5) NOT NULL DEFAULT '',
  `info` char(5) NOT NULL DEFAULT '',
  PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

  可以看出varchar(5)中的5代表的是5個“字”,而不是5個字節(jié)(bytes),當我們存儲長度超過制定長度的時候會將超過的部分“咔嚓”掉,我的mysql版本是5.6,字符集(charset)utf8和gbk是一樣的。

其他版本我電腦上沒有,去官方文檔看看有沒有什么說明,在官方文檔中查了半天終于發(fā)現(xiàn)了點區(qū)別:

下面這段來自http://dev.mysql.com/doc/refman/4.1/en/char.html,是對mysq4.1的說明:

復制代碼 代碼如下:

The CHAR and VARCHAR types are declared with a length that indicates the maximum number of characters you want to store. For example, CHAR(30) can hold up to 30 characters. (Before MySQL 4.1, the length is interpreted as number of bytes.)

再看看其他版本的類似的說明:

復制代碼 代碼如下:

The CHAR and VARCHAR types are declared with a length that indicates the maximum number of characters you want to store. For example, CHAR(30) can hold up to 30 characters.

 顯而易見了,官方文檔說了,mysql版本小于4.1的時候存儲的時候符合說法:varchar(5)保存5個bytes,及5個英文數(shù)字或者2.5個漢字(假設一個漢字2個字節(jié));

mysql版本大于等于4.1的時候varchar(5)中的5不再是字節(jié)數(shù)了,應該理解為“字”這里的字的意思是一個漢字和一個英文或者數(shù)字“相同對待”

  2、mysql中的limit,你真的會用嗎?

  你在項目中怎么使用limit?limit num?還是limit num1,num2?還是其他的?要知道limit使用不同的形式性能差距很大的。

  我自己測試了下,在一張innodb表中去使用limit,表中10000條數(shù)據(jù),四個字段,id(int)、time(int)、title(varchar)、body(mediumtext),大小大約170M左右,首先關掉查詢緩存,免得查詢緩存對查詢時間有影響,這里要注意time字段上面加了索引,

復制代碼 代碼如下:

SET @@query_cache_type=ON;
SET GLOBAL query_cache_size=0;

  打開Query profiler來查看語句執(zhí)行所花費的時間
復制代碼 代碼如下:

set profiling=1;

  接下來對下面幾個語句進行執(zhí)行

復制代碼 代碼如下:

a、SELECT id,TIME,title FROM cnblogs WHERE TIME>=1315646940 ORDER BY TIME ASC LIMIT 2000,10

  b、SELECT id,TIME,title FROM cnblogs WHERE TIME>=1315646940 ORDER BY TIME ASC LIMIT 10

     c、 SELECT id,TIME,title FROM cnblogs ORDER BY TIME ASC LIMIT 3000,10

執(zhí)行順序a,b,c,a,b,c,c,a,a(這里需要注意下,雖然我關閉了緩存,但是上一次的查詢還是會緩存,這個可以從Query profiler中看出來,所以進行交叉執(zhí)行),使用下面的語句查看結果

復制代碼 代碼如下:

SHOW profiles;

從上面的語句執(zhí)行時間分析可以看出,不考慮緩存因素,當使用limit的時候,"limit begin,num"這種形式比"limit num"這種形式效率低很多,因此,在使用的時候盡可能的使用第二種形式,比如說要循環(huán)獲取一個表里面的數(shù)據(jù),一次取出來內從放不下,這個時候就要按照id(或者其他排序字段)進行l(wèi)imit了,我們就可以通過獲取上次的該字段臨界值作為下次取數(shù)據(jù)的最小值,使用limit num這種形式效率會高很多。

相關文章

  • SQL通用語法以及分類圖文詳解

    SQL通用語法以及分類圖文詳解

    本書從初學者的角度出發(fā),由淺入深,循序漸進地介紹了SQL通用語法的相關知識,下面這篇文章主要給大家介紹了關于SQL通用語法以及分類的相關資料,需要的朋友可以參考下
    2022-12-12
  • MySQL中select語句使用order按行排序

    MySQL中select語句使用order按行排序

    本文介紹MySQL數(shù)據(jù)庫中執(zhí)行select查詢語句,并對查詢的結果使用order by 子句進行排序
    2016-04-04
  • MySQL實例精講單行函數(shù)以及字符數(shù)學日期流程控制

    MySQL實例精講單行函數(shù)以及字符數(shù)學日期流程控制

    SQL函數(shù)即數(shù)據(jù)庫的內置函數(shù),可以運用在SQL語句中實現(xiàn)特定的功能。SQL單行函數(shù)對于每一行數(shù)據(jù)進行計算后得到一行輸出結果。SQL單行函數(shù)根據(jù)數(shù)據(jù)類型分為字符函數(shù)、數(shù)字函數(shù)、日期函數(shù)、轉換函數(shù),另外還有一些別的函數(shù)
    2021-10-10
  • MySQL 5.0觸發(fā)器參考教程

    MySQL 5.0觸發(fā)器參考教程

    需要學習mysql觸發(fā)器的朋友需要了解的東西,整理的比較多,建議大家慢慢多練習
    2008-09-09
  • Ubuntu下啟動、停止、重啟MySQL,查看錯誤日志命令大全

    Ubuntu下啟動、停止、重啟MySQL,查看錯誤日志命令大全

    這篇文章主要介紹了Ubuntu下啟動、停止、重啟MySQL,查看錯誤日志命令大全,需要的朋友可以參考下
    2014-06-06
  • MySQL中如何正確存儲IP地址

    MySQL中如何正確存儲IP地址

    在MySQL中,當存儲IPv4地址時,應該使用32位的無符號整數(shù)(UNSIGNED INT)來存儲IP地址,而不是使用字符串,下面就來詳細的介紹一下具體原因,感興趣的可以了解一下
    2023-05-05
  • 圖文詳解MySQL中的主鍵與事務

    圖文詳解MySQL中的主鍵與事務

    這篇文章主要給大家介紹了關于MySQL中主鍵與事務的相關資料,主鍵與事務是我們使用mysql中經(jīng)常遇到的,文中通過圖文以及實例代碼介紹的很詳細,需要的朋友可以參考下
    2021-05-05
  • Linux CentOS MySQL數(shù)據(jù)庫安裝配置教程

    Linux CentOS MySQL數(shù)據(jù)庫安裝配置教程

    這篇文章主要為大家詳細介紹了Linux CentOS MySQL數(shù)據(jù)庫的安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Windows下通過DOS命令登錄MYSQL的方法

    Windows下通過DOS命令登錄MYSQL的方法

    這篇文章主要介紹了Windows下通過DOS命令登錄MYSQL的方法,方法很簡單,本文給出了詳細操作步驟,需要的朋友可以參考下
    2015-05-05
  • window10下mysql 8.0.20 安裝配置方法圖文教程

    window10下mysql 8.0.20 安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了window10下mysql 8.0.20 安裝配置方法圖文教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05

最新評論