mysql 中int類型欄位unsigned和signed的探索

来源:http://www.cnblogs.com/wangzhongqiu/archive/2017/02/21/6424827.html
-Advertisement-
Play Games

轉自:http://www.0791quanquan.com/news_keji/topic_816453/ 探索一:正負數問題 拿tinyint欄位來舉例,unsigned後,欄位的取值範圍是0-255,而signed的範圍是-128 - 127。 那麼如果我們在明確不需要負值存在的情況下,通常是 ...


轉自:http://www.0791quanquan.com/news_keji/topic_816453/

探索一:正負數問題

拿tinyint欄位來舉例,unsigned後,欄位的取值範圍是0-255,而signed的範圍是-128 - 127。 那麼如果我們在明確不需要負值存在的情況下,通常是不要設置signed來支持負數的。 因為只支持正數會讓存儲空間大一倍呢(當然我這種表達可能不准確)。 假設我們使用tinyint來存儲一些狀態值。 0表示刪除,1表示待付款,2表示已付款,3...。 突然來個需求要加訂單取消,一些有代碼潔癖的人就想,那就將定義為:-1表示取消吧。 但是就因為有了-1,我們說起來應該可以從0存到255的,結果就變為了0-127。 所以一般情況下,我們不建議這樣設置

  欄位設置為unsigned後有一個問題是:

當select a - b from t時,a為10,b為12,那麼這時就會出現異常情況:ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(`test`.`t`.`a` - `test`.`t`.`b`)'

所以註意這種情況即可

探索二:性能問題

嚴格講,在性能上是有細微的差別的。 unsigned的性能更好,當只存儲正整數的情況下。 因為,當unsigned時,假設查詢值在500以下的數據,那麼MySQL會將範圍定義為:0-500,而如果是signed,則查詢範圍為:-2147483648 - 500。 參考文章:http://rakesh.sankar-b.com/2010/08/25/mysql-unsigned-int-to-signed-int-performance-tips-index/

裡面講到:

Let’s say you want to know the list of customers who have purchased an item of quantity 500 or less. Following is the query you might be used to get these results:

SELECT *
FROM customer
WHERE quantity <= 500

Cool, the above query will yield you the list of customers who have purchased an item of quantity 500 or less. Right, what is the big deal, it should return fast, but consider when you have a table with millions of records then this query might be slow in returning you the results.

Yes, that is true, you can always add an “ index ” to the “quantity” field and improve the performance – exactly, this should improve the performance of processing the query much better than without an “index”.

Without “unsigned”:
Process flow, since the quantity field is an “ int ” and you have an  index  of this field, MySQL  will define the range as  -2147483648 to 500  and it will get the result based on this range.

With “unsigned”:
Process flow, since the quantity field is an “ int ” with “ unsigned ” and you have an index of this field,  MySQL  will define the range as  0 to 500  and it will get the result based on this range.

Now compare the difference yourself and tell me, for sure it will improve the performance of the your query. Since we know we never store any negative (signed values) in the quantity field and the default behavior of “ int ” is “ signed “, it’s always better to write a full-syntax while creating a table.

總的說來,設置unsigned最大的差異是欄位取值範圍的變化。 所以基於這點來對欄位的unsigned或者signed是比較明智的決定

以上

參考文獻:

http://verysimple.com/2006/10/22/mysql-data-type-optimization-tips/

http://rakesh.sankar-b.com/2010/08/25/mysql-unsigned-int-to-signed-int-performance-tips-index/

http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html

http://www.cnblogs.com/blankqdb/archive/2012/11/03/blank_qdb.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • conda升級預設官網地址,速度會特別慢,現在我們指定一個當前可用的鏡像,步驟如下: 1.執行命令,生成.condarc文件 執行完上述命令後會在當前用戶目錄下生成.condarc文件 2.確認.condarc文件內容 3.確認無誤後,關閉控制台視窗,重新打開才會重新載入配置。 再升級什麼的,會發現 ...
  • --資料庫表名及欄位名都無數據字典,現在補充上。 --暫時想到如下笨辦法: --思路,分兩步,一是填寫表的字典。二是填寫表中欄位的字典。 --將表名導出到Table_Description --將列名導出到Column_Description --然後填寫上Description,最後調用存儲過程, ...
  • 1. 可能是 mysql 登錄用戶限制了只能本地連接,輸入以下命令設置可連接的 ip 地址, % 表示 所有 ip GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; flush priv ...
  • 項目上使用Oracle資料庫,所以本地需要備份還原(居然沒有在區域網上共用一個資料庫)。 比如說現在有 student.dmp 資料庫備份文件一份。 安裝配置 Oracle 11g XE 簡介 以下內容來自Oracle Database 快捷版 11g 第 2 版的 OTN 許可協議: Any us ...
  • 聲音識別和聲學模型的建立 [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan 2016-3-30 聲明 1)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應。如果某部分不小心侵犯了大家的利益,還望海涵,並聯繫博主 ...
  • 一 、對數據的增刪改查。 1. 新增 2. 修改 3. 查看 4. 刪除 ...
  • Microsoft SQL Server(以下簡稱SQL Server)作為一種中小型資料庫管理系統,已經得到了廣泛的應用,該系統更強調由系統來管理鎖。在用戶有SQL請求時,系統分析請求,自動在滿足鎖定條件和系統性能之間為資料庫加上適當的鎖,同時系統在運行期間常常自動進行優化處理,實行動態加鎖。 對 ...
  • 最近搭建了一套SQLServer2016 AlwaysOn。 筆者是採用修改各節點的hosts文件,以及修改電腦名的dns尾碼,來避免需要另外一臺DNS伺服器。 上面128,129,130三個IP屬於AlwaysOn的三個節點伺服器 IP100屬於可用性組偵聽器IP IP150屬於群集 途中遇到的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...