一、CentOS 7.9 安裝 redis-6.2.0 1 下載地址:https://download.redis.io/releases/redis-6.2.0.tar.gz 2 安裝gcc來進行編譯 Redis 由 C語言編寫,所以需要系統中有 gcc 編譯器 使用 gcc --version ...
淺談Mysql常見註意事項一
-
不要在Mysql中使用utf8
Mysql中utf8並不是真正意義上的utf8,而是指的是utf8mb3,這種字元集僅支持BMP字元,碼位在0到65535之間,不支持一些補充字元,例如一些生僻字和emoji表情。utf8mb3是Mysql早期就支持的字元集,由於不支持補充字元,Mysql在5.5.3之後的版本裡面增加了utf8mb4的編碼。在未來Mysql版本中,可能會刪除utf8mb3字元集。utf8mb4支持BMP和補充字元,對於BMP字元,utf8mb4和utf8mb3相同,但是對於補充字元,utf8mb4需要4個位元組存儲,utf8mb3每個字元最多使用3個位元組,無法存儲該字元,所以在創建表,使用utf8mb4,而不是utf8或者utf8mb3。
字元集 支持的字元 每個字元存儲需要的位元組 utf8mb3、utf8(deprecated) BMP 1~3位元組 ucs2 BMP 2位元組 utf8mb4 BPM和補充字元 1~4位元組 utf16 BMP和補充字元 2位元組或4位元組 utf16le BMP和補充字元 2位元組或4位元組 utf32 BMP和補充字元 4位元組 Mysql官方文檔說明:https://dev.mysql.com/doc/refman/8.0/en/charset-unicode.html
-
小數類型使用decimal
推薦使用decimal,不建議使用float和double,float和double會有精度丟失的問題,並且在比較值或者進行減法運算時可能會出現問題。decimal是定點數,在MySQL中,定點數是以字元串形式存儲,所以在精度要求比較高時,推薦使用decimal類型。如果存儲的數據超出decimal訪問時,可以將數據按照整數和小數分開存儲。
數據類型 說明 存儲位元組 float 單精度浮點數 4個位元組 double 雙精度浮點數 8個位元組 decimal(M, D),M預設值是10 壓縮的"嚴格"定點數 根據M和D而定 官網decimal存儲位元組表格
Leftover Digits Number of Bytes 0 0 1-2 1 3-4 2 5-6 3 7-9 4 decimal存儲位元組計算:Mysql是將每9位十進位存儲為4個位元組。
例如:以官網例子為例
decimal(18, 9):小數部分是9,需要4個位元組,整數部分也是9,也需要4個位元組。
decimal(20, 6): 小數部分是6,需要3個位元組,整數部分是14,14-9=5,整數部分需要4個位元組+剩餘的5個存儲需要的3個位元組。
-
推薦統計值使用count(*)
在阿裡JAVA開發手冊中推薦使用count(*),不要使用count(列名),count(常量)。count(列名)會查詢符合條件的並且列的值不為NULL的行數,也就是說會過濾掉列為NULL的行,除非有特殊的需求,所以一般不要使用。count(*)在MySQL8.0.13之後對SELECT COUNT(*) FROM tbl_name進行了優化,效率得到提升。InnoDB引擎count(*)和count(1)其實是一樣的,不存在誰快誰慢的問題,不過推薦使用count(*),符合SQL92定義的標準統計行數的語法。以下附上官網關於count(*)的說明及鏈接,感興趣的小伙伴可以研究研究官方文檔。
MySQL官方文檔說明:https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_count
As of MySQL 8.0.13, SELECT COUNT(*) FROM tbl_name query performance for InnoDB tables is optimized for single-threaded workloads if there are no extra clauses such as WHERE or GROUP BY.
InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.
原文鏈接:https://monkey.blog.xpyvip.top/archives/qian-tan-mysql-chang-jian-zhu-yi-shi-xiang-yi