MySql 數據類型選擇與優化

選擇優化的數據類型

更小的通常更好
一般情況下盡量使用可以正確存儲數據的最小類型。更小的數據類型通常更快,因為它們占用更少的磁盤,內存和CPU緩存,并且處理時需要的CPU周期也更少。但也要確保沒有低估需要存儲值的范圍。
簡單就好
簡單的數據類型通常需要更少的CPU周期。例如:整型比字符操作代價更低,因為字符集和校對規則(排序規則)使字符比較比整型比較更復雜。例如:應該使用 mysql 的內建類型而不是字符來存儲日期和時間,另外一個應該使用整型存儲IP地址。
盡量避免 NULL
NULL 使得索引、索引統計和值比較都更復雜

實數類型
DECIMAL 類型用于存儲精確的小數。因為CPU 不支持對 DECIMAL 的直接計算,所以在 Mysql 5.0 和更高版本中,Mysql 服務器自身實現了 Decimal 的高精度計算。相對而言,CPU 直接支持原生浮點計算,所以浮點運算明顯更快。Decimal 只是一種存儲格式,在計算中 Decimal 會轉換為 Double 類型。有時候也可以使用 Bigint 替代浮點型。

字符串類型
Varchar
Varchar 節省了存儲空間,所以對性能也有幫助。但是,由于是變長的,在 Update 時可能使行長變得比原來更長,這就導致需要做額外的工作,比如導致頻繁的頁分裂和合并,從而產生大量磁盤碎片。
Char
Char 類型是定長的,當存儲 Char 時, Mysql 會刪除所有的末尾空格。對于經常變更的數據也不容易產生磁盤碎片。

[!NOTE] 慷慨是不明智的
更長的列會消耗更多的內存,因為 Mysql 通常會分配固定大小的內存塊來保存內部值。尤其是使用內存臨時表進行排序或操作時會特別糟糕。在使用磁盤臨時表進行排序時也同樣糟糕。
所以最好的策略是只分配真正需要的空間

BLOB 和 TEXT
Mysql 對 BLOB 和 TEXT 列進行排序與其它類型是不同的:它只對每個列的最前 max_sort_length 字節而不是整個字符串做排序。Memory 引擎不支持 BLOB 和 TEXT 類型,因此在包含 BLOB 和 TEXT 類型的列都會轉而使用 MyIsam 磁盤臨時表。

日期和時間類型
TIMESTAMP
TIMESTAMP 顯示的值也依賴于時區
DATETIME
它把日期和時間封裝到格式為 YYYYMMDDHHMMSS 的整數中,與時區無關。

[!NOTE] TIPS
有時候人們會將 UNIX時間戳存儲為整數,但這將不會帶來任何收益。用整數保存時間戳的格式通常不方便處理,所以我們不推薦這樣做。

選擇標識符
當選擇標識列的類型時,不僅僅需要考慮存儲類型,還需要考慮 Mysql 對這種類型怎么計算和比較。一旦選定了一種類型,要確保在所有關聯表中都使用同樣的類型。類型之間需要精確匹配,包括像 UNSIGNED 這樣的屬性。混用不同數據類型可能導致性能問題,即使沒有性能影響,在比較操作時隱式類型轉換也可能導致很難發現的錯誤。

選擇合適的主鍵
大多數情況使用自增主鍵ID就可以解決問題,但當我們預估系統會有比較大的業務增長時,可以考慮使用分布式ID作為業務主鍵,避免后面分庫分表時帶來的不便

MySQL schema 設計中的陷阱

太多的列
MySQL 的存儲引擎API工作時需要在服務器層和存儲引擎層之間通過行緩沖格式拷貝數據,然后在服務器層將緩沖內容解碼成各個列。從行緩沖格式將編碼過的列轉換成行數據結構的操作代價是非常高的。這個過程是CPU密集型的(太多的列會導致CPU占用過高)。
太多的關聯
盡量不關聯或者少關聯表

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21053.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21053.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21053.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【自然語言處理】【Scaling Law】Observational Scaling Laws:跨不同模型構建Scaling Law

相關博客 【自然語言處理】【Scaling Law】Observational Scaling Laws:跨不同模型構建Scaling Law 【自然語言處理】【Scaling Law】語言模型物理學 第3.3部分:知識容量Scaling Laws 【自然語言處理】Transformer中的一種線性特征 【自然語言處理】【大…

jmeter性能優化之tomcat配置與基礎調優

一、 修改tomcat初始和最大堆內存 進入到/usr/local/tomcat7-8083/bin目錄下,編輯catalina.sh文件,,默認堆內存是600m,初始堆內存和最大堆內存保持一致, 可以更改到本機內存的70%,對于Linux系統&#xff0…

conda創建虛擬環境并激活

1 conda activate base 2 conda creat -n aaa python** 3 conda activate aaa 4 interpreter里面去選擇剛搞好的編譯器 ...../conda.exe

【SpringBoot】四種讀取 Spring Boot 項目中 jar 包中的 resources 目錄下的文件

本文摘要:四種讀取 Spring Boot 項目中 jar 包中的 resources 目錄下的文件 😎 作者介紹:我是程序員洲洲,一個熱愛寫作的非著名程序員。CSDN全棧優質領域創作者、華為云博客社區云享專家、阿里云博客社區專家博主。公粽號&#xf…

【操作系統】Windows平臺捕獲崩潰現場底層原理,附代碼親測MiniDumpWriteDump

MiniDumpWriteDump 是一個Windows API函數,它屬于DbgHelp.dll庫,用于生成程序崩潰時的內存轉儲文件(MiniDump)。這個函數是Windows平臺下用于捕獲程序崩潰時的內存狀態的常用方法之一。以下是MiniDumpWriteDump函數的原理和工作流…

【C++】ios::sync_with_stdio(false) 與 cin.tie(nullptr) 加速 IO

一、前言 之前寫題遇到大數據量(cin、cout 數據量級達到 1e5、1e6 ),因為考慮 IO 性能報錯 TLE,故選擇 scanf、printf 替代 cin、cout,以解決問題。一直以來沒有深入研究其中原因,只知關鍵詞——同步&…

設計模式(十三)行為型模式---命令模式

文章目錄 命令模式簡介結構UML圖具體實現UML圖代碼實現 命令模式簡介 命令模式(command pattern)也叫動作模式或者事務模式。它是將請求(命令)封裝成對象,使得可以用不同的請求對客戶端進行參數化,具體的請…

MD中 面料的物理屬性參數

該圖片是Marvelous Designer軟件中"Fabric Physical Properties"(面料物理屬性)面板的截圖,用于調整面料在彎曲、折疊時的硬度(Buckling Stiffness)。 目標部分解釋了調整Buckling Stiffness的作用:通過調整該百分比值來決定面料角落處的硬度。進入80%的Buckling St…

筆記-anaconda配置Python環境

查看環境 conda env list 創建python name環境,python版本為3.9: conda create -n name python3.9 激活: conda activate name 去掉激活: conda deactivate name 進入pandas目錄: cd D:\學習\pyton\antpy代碼\ant-learn-…

NXP RT1060學習總結 - CANFD功能

1、RT1060-CAN FD功能簡介 這里使用RT1060系列的1064芯片進行開發,測試板是官方提供的開發板;RT1060系列支持3路CAN功能,CAN1和CAN2只能最為普通的CAN外設,支持CAN2.0,而CAN3支持CAN-FD功能;CAN-FD功能這里…

【LeetCode 77. 組合】

1. 題目 2. 分析 本題有個難點在于如何保存深搜得到的結果?總結了一下,深搜處理的代碼,關于返回值有三大類。 第一類:層層傳遞,將最深層的結果傳上來;這類題有:【反轉鏈表】 第二類&#xff1…

域名/子域名接管漏洞

域名/子域名接管漏洞 1.域接管2.子域接管子域接管概述使用BBOT掃描可劫持的子域通過DNS通配符生成子域接管 3.利用子域接管4.子域名接管防御手段 1.域接管 如果您發現某個域名被某個服務使用,但公司已經失去了對其的所有權,您可以嘗試注冊它&#xff08…

默認路由,直接路由,靜態路由,動態路由

對于華為設備,如華為路由器或交換機,設置這些路由類型需要通過設備的管理界面或命令行界面進行配置。以下是一般情況下如何在華為設備上設置這些路由類型的指導: 默認路由: 使用命令行界面(CLI)&#xff0c…

QMatrix詳解

一、定義 QMatrix是Qt框架中的一個類,它表示一個2x3的變換矩陣,通常用于進行二維圖形的幾何變換。這個類允許你對圖形進行平移、縮放、旋轉和剪切等操作。 二、功能 QMatrix的主要功能是提供一個便捷的方式來對二維圖形進行線性變換。通過構建一個變換…

CS和msf的權限傳遞,利用mimikatz抓取win10明文密碼

一、Cobaltstrike的安裝 http://t.csdnimg.cn/yhZin 安裝CobaltStrike,瀏覽博主的上篇文章即可!!! 這里我在自己的本機win11上執行了Client去連接kali中的Server端,直接執行.cmd文件即可!!&…

【vscode】ctrl+shift+end選中以下所有行刪除

總結,ctrlshiftend選中以下所有行 以下由chatgpt生成 在 Visual Studio Code(VS Code)中,如果你想要選中當前光標所在的一行及之后的所有行并刪除它們,可以通過組合鍵操作來實現。這種功能在編輯大型文件時特別有用&am…

【計算機畢業設計】基于SSM++jsp的校園驛站管理系統【源碼+lw+部署文檔】

目錄 第1章 緒論 1.1 課題背景 1.2 課題意義 1.3 研究內容 第2章 開發環境與技術 2.1 MYSQL數據庫 2.2 JSP技術 2.3 SSM框架 第3章 系統分析 3.1 可行性分析 3.1.1 技術可行性 3.1.2 經濟可行性 3.1.3 操作可行性 3.2 系統流程 3.2.1 操作流程 3.2.2 登錄流程 3.2.3 刪除信息流…

node會話管理詳解(cookie、session、token)

在Node.js中,cookie、session和token都是用于會話管理的機制,但它們各自有不同的使用場景和特性。 一、cookie 命令:npm install cookie-parser -save -save 參數表示將這個模塊添加到項目的 package.json 文件的 dependencies 部分&#x…

C語言| 輸出菱形*

C語言| 輸出*三角形-CSDN博客 輸出菱形。 【分析思路】 學會輸出*的三角形之后輸出菱形就很簡單了。我們分析一下,菱形是由兩個對稱的三角形組成的,也因為是對稱的,所以輸出的菱形的行數肯定是一個奇數。 1 我們在編程的時候,要…

基于卷積-小波神經網絡的SAR圖像海冰變化檢測方法(MATLAB R2018A)

海冰是冰凍圈的重要組成部分,海冰的變化信息對航行安全和自然資源開采等非常重要,許多船舶沒有加固防冰設備,因此,必須避開所有的冰區。尤其當冰壓很高時,即使破冰船也很難在冰層中前行。為了安全航行,獲取…