亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

實(shí)例測(cè)試MySQL的enum類型

2024-07-24 13:15:07
字體:
供稿:網(wǎng)友

在開發(fā)項(xiàng)目時(shí)通常會(huì)遇到一些狀態(tài)字段,例如訂單的狀態(tài)有 待支付、已支付、已關(guān)閉、已退款 等,我以前做的項(xiàng)目都是把這些狀態(tài)用數(shù)字存在數(shù)據(jù)庫中,然后在 php 代碼中用常量來維護(hù)一份映射表,例如:

const STATUS_PENDING = 0;const STATUS_PAID = 1;const STATUS_CLOSED = 2;const STATUS_REFUNDED = 3;

但是在實(shí)際使用過程中發(fā)現(xiàn)并不是那么好用,由于各種原因(追查 bug、臨時(shí)的統(tǒng)計(jì)需求等)我們常常需要登錄到 mysql 服務(wù)器里手動(dòng)執(zhí)行一些 sql 查詢,由于許多表都有狀態(tài)字段,寫 sql 時(shí)必須對(duì)照的 php 代碼里的映射關(guān)系來寫,一不小心還有可能將不同表的狀態(tài)數(shù)字弄混導(dǎo)致大問題。

于是我在新項(xiàng)目中準(zhǔn)備使用 mysql 的 enum 類型來存儲(chǔ)各種狀態(tài),在使用過程中發(fā)現(xiàn)如果在 Laravel 的 migration 文件中對(duì)使用了 enum 類型的表做變更(即使是變更非 enum 類型的字段)都會(huì)報(bào)錯(cuò)

[Doctrine/DBAL/DBALException]Unknown database type enum requested, Doctrine/DBAL/Platforms/MySQL57Platform may not support it.

搜索了一下,發(fā)現(xiàn)是 doctrine 不支持 mysql 的 enum,該文中列舉了 enum 的 3 個(gè)缺點(diǎn):

新增 enum 值的時(shí)候需要重建整個(gè)表,當(dāng)數(shù)據(jù)量大的時(shí)候可能需要耗費(fèi)數(shù)小時(shí)。

enum 值的排序規(guī)則是按創(chuàng)建表結(jié)構(gòu)時(shí)指定的順序,而非字面值的大小。

依賴 mysql 對(duì) enum 值的校驗(yàn)并不是非常必要,在默認(rèn)配置下插入非法值最終會(huì)變成空值。

根據(jù)新項(xiàng)目的實(shí)際情況,不太可能出現(xiàn)需要對(duì)狀態(tài)字段做排序的需求,即使有我們可以在設(shè)計(jì)表結(jié)構(gòu)的時(shí)候就定好順序,因此缺點(diǎn) 2 可以忽略;而缺點(diǎn) 3 則可以通過代碼規(guī)范、插入/更新前校驗(yàn)等方式來規(guī)避;至于缺點(diǎn) 1,我們需要做一些測(cè)試。

測(cè)試準(zhǔn)備#

首先創(chuàng)建一個(gè)表:

CREATE TABLE `enum_tests` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `status` enum('pending','success','closed') COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

然后插入 100W 條數(shù)據(jù):

$count = 1000000;$bulk = 1000;$data = [];foreach (['pending', 'success', 'closed'] as $status) {  $data[$status] = [];  for ($i = 0; $i < $bulk; $i++) {    $data[$status][] = ['status' => $status];  }}for ($i = 0; $i < $count; $i += $bulk) {  $status = array_random(['pending', 'success', 'closed']);  EnumTest::insert($data[$status]);}

測(cè)試過程#

測(cè)試1#

在 enum 值列表最后添加一個(gè)值 refunded

ALTER TABLE `enum_tests` CHANGE `status` `status` ENUM('pending','success','closed','refunded') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

輸出:

Query OK, 0 rows affected (0.04 sec)Records: 0 Duplicates: 0 Warnings: 0

結(jié)論:在末尾追加 enum 值時(shí)幾乎沒有成本。

測(cè)試 2:#

刪除剛剛添加的值 refunded

ALTER TABLE `enum_tests` CHANGE `status` `status` ENUM('pending','success','closed') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

輸出:

Query OK, 1000000 rows affected (5.93 sec)Records: 1000000 Duplicates: 0 Warnings: 0

結(jié)論:刪除一個(gè)沒有用過的 enum 值仍需全表掃描,成本較高,但還在可接受范圍內(nèi)。

測(cè)試 3:#

將 refunded 插入到值列表中間而非末尾

ALTER TABLE `enum_tests` CHANGE `status` `status` ENUM('pending','success','refunded', 'closed') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

輸出:

Query OK, 1000000 rows affected (6.00 sec)Records: 1000000 Duplicates: 0 Warnings: 0

結(jié)論:在原 enum 值列表中間新增值需要全表掃描并更新,成本較高。

測(cè)試 4:#

刪除值列表中間的值

ALTER TABLE `enum_tests` CHANGE `status` `status` ENUM('pending','success','closed') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

輸出:

Query OK, 1000000 rows affected (4.23 sec)Records: 1000000 Duplicates: 0 Warnings: 0

結(jié)論:需全表掃描,成本較高。

測(cè)試 5:#

給 status 字段添加索引后再執(zhí)行上述測(cè)試

ALTER TABLE `enum_tests` ADD INDEX(`status`);

發(fā)現(xiàn)測(cè)試 2-4 的耗時(shí)反而有所增加,應(yīng)該是同時(shí)需要更新索引導(dǎo)致的。

結(jié)語:#

對(duì)于我的新項(xiàng)目來說只會(huì)出現(xiàn)新增 enum 值的情況,即使將來有個(gè)別狀態(tài)廢棄不用也不需要去調(diào)整 enum 的值列表,因此決定在項(xiàng)目中引入 enum 類型作為存儲(chǔ)狀態(tài)的數(shù)據(jù)類型。

 

注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MYSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
欧美a级一区二区| 日本高清不卡中文字幕| 亚洲图色中文字幕| 久久99精品国产麻豆婷婷| 97人人模人人爽视频一区二区| 亚洲免费一在线| 免费看一级大片| 欧美亚洲国产一区二区三区| 人体精品一二三区| 青青国产在线观看| 绯色av一区二区| 国产精品第一页在线| 国产一区国产精品| 欧美18xxxxx| 欧美日韩久久久久| 麻豆成人av在线| 日本高清xxxx| av小说在线播放| 久久精品久久99精品久久| 欧美日韩国产一中文字不卡| 国产福利电影在线播放| 天堂在线第六区| 奇米视频888战线精品播放| 午夜视频在线观| 日本三级韩国三级欧美三级| 欧美日韩精品系列| 亚洲3p在线观看| 亚洲v日韩v欧美v综合| 亚洲欧美天堂在线| 亚洲欧美另类小说| 在线香蕉视频| 亚洲黄色av一区| 老**午夜毛片一区二区三区| 国产精品女同一区二区三区| 在线播放91| 欧美激情国产精品日韩| 欧美激情一区二区三区在线| 不卡中文一二三区| 免费看电影在线| 中文字幕免费在线观看视频一区| 国产日本欧美视频| 精品国产凹凸成av人导航| 黄色录像特级片| 欧洲精品在线视频| 中国女人内谢25xxxx免费视频| 91在线精品一区二区三区| 国产精品一品视频| 桃乃木香奈和黑人aⅴ在线播放| 欧美日韩视频免费| 久久99久久人婷婷精品综合| 亚洲AV无码成人精品一区| 一区二区三区产品免费精品久久75| 爽爽淫人综合网网站| 麻豆精品免费视频| 在线国产一区二区| 欧美色视频免费| 欧美三级乱人伦电影| 在线视频免费观看一区| 91丨porny丨在线中文| 老熟妇精品一区二区三区| 欧美一级免费片| 日本精品免费一区二区三区| 免费成人美女在线观看.| 欧美日韩中文国产| 外国电影一区二区| 国产乱淫av一区二区三区| 欧美本精品男人aⅴ天堂| 国产精品777777| 国产精品亚洲а∨天堂免在线| 亚洲精品视频中文字幕| 日韩区国产区| 国产网站在线免费观看| 爱啪视频在线观看视频免费| 国产精品自拍第一页| 国产日韩精品视频一区| 不用播放器的免费av| 天天操狠狠操夜夜操| 欧美精品一区二区三区蜜臀| 快播电影网址老女人久久| 欧美日产国产成人免费图片| 另类的小说在线视频另类成人小视频在线| 天海翼在线观看视频| 午夜精品一区二区三区三上悠亚| 国模精品一区二区三区| 日韩高清中文字幕一区二区| 青青草原在线免费观看视频| 国产在线久久久| 国产中文在线观看| 18深夜视频在线观看| 欧美高清性粉嫩交| 色8久久久久| 粗暴蹂躏中文一区二区三区| 欧美日韩一区免费| 国产99久久久久久免费看农村| 91蜜桃传媒精品久久久一区二区| 中文字幕日韩精品久久| 亚洲精品传媒| 国产男女无套在线播放| 手机在线理论片| 国产成人av福利| 久久精品天堂| 羞羞视频网站在线免费观看| 国产在线1区| 美女视频黄a大片欧美| 99热国内精品| 久久精品国产亚洲777| 欧美一区二区三区成人片在线| 亚洲电影一级黄| 狠狠色香婷婷久久亚洲精品| 欧美国产精品中文字幕| 国产一区在线观看视频| 色与欲影视天天看综合网| 亚洲欧美日韩国产中文| 欧美日韩亚洲一区| 美女不穿衣服的网站| 美女视频第一区二区三区免费观看网站| 91精品在线免费| 91久久精品日日躁夜夜躁欧美| 亚洲激情婷婷| 德国极品另类| 国产成人av无码精品| 成年免费插网| 色橹橹高清视频在线播放| 国产一区三区在线播放| 大桥未久女教师av一区二区| 色视频欧美一区二区三区| 一本色道久久综合亚洲精品婷婷| 国产女呦网站| 国产在线一二三区| 嫩草影院中文字幕| 欧美日韩在线播放视频| 老司机福利在线视频| 青春草免费在线视频| 国精品一区二区| 一本大道久久a久久精二百| 国产一精品一av一免费爽爽| 乱子伦一区二区三区| 国产欧美日本一区视频| www.久久综合| 欧美午夜性色大片在线观看| 青青视频一区二区| 日韩中文字幕高清在线观看| 亚洲成人在线播放| 亚洲国产精品久久不卡毛片| 久久婷婷人人澡人人喊人人爽| 3d动漫精品啪啪1区2区免费| 久久精品国产免费观看99| 九九九九九九九九| 免费电影网站在线观看| 在线中文字幕亚洲| 国产aa视频| 亚洲国产高清一区二区三区| 亚洲日产av中文字幕| 五月天婷婷综合| 亚洲iv一区二区三区| 后进极品白嫩翘臀在线视频| 波多野结衣视频观看| 国产精品视频流白浆免费视频| 欧美中文在线观看| 俄罗斯一级**毛片在线播放| 毛片大全在线观看| 91精品国产高潮对白| 国产精品一区二区三区四区| 最近2018中文字幕免费在线视频| 亚洲国产欧美在线成人app| 一区二区精品在线| 成人xvideos免费视频| 欧美亚洲免费高清在线观看| 欧美动漫一区二区| 欧美曰成人黄网| 国产福利热线视频| 男男做爰猛烈叫床爽爽小说| 国产精品99久久久久久久久| 中国字幕a在线看韩国电影| 国产伦精品一区二区三区免费优势| 日韩精品综合一本久道在线视频| 色噜噜狠狠一区二区三区| 操她视频网站| 亚洲美女精品视频| 美女又爽又黄视频毛茸茸| 丁香六月激情网| 亚洲美女一区二区三区| 欧美亚洲免费在线一区| 日韩精品亚洲元码| 午夜久久久久久久| 日韩簧片在线观看| 日韩欧美精品| 美女黄视频在线观看| 精品国自产拍在线观看| 欧美日韩国产色视频| 亚洲精品国产一区黑色丝袜| 97se国产在线视频| 一区二区三区国产好| 国产一二三四五| 免费97视频在线精品国自产拍| 久99九色视频在线观看| 国产精品久久久久久久久搜平片| 91嫩草国产在线观看| 欧美aa在线| 亚洲欧美精品午睡沙发| 激情aⅴ欧美一区二区欲海潮| 中文字幕在线一区| 无码一区二区三区在线观看| 亚州精品国产精品乱码不99按摩| 九九热视频精品在线观看| 亚洲一线二线三线视频| 亚洲天天影视网| julia中文字幕一区二区99在线| 欧美精品第一区| 日韩加勒比系列| 国产网站在线播放| 色综合久久天天| 国产激情在线观看视频| 奇米精品一区二区三区在线观看一| 日本成人在线免费视频| 亚洲精品字幕| 久久精品理论片| 亚洲黄色网址| 欧美日韩国产精品成人| 亚色视频在线播放| 成人亚洲激情网| 正义之心1992免费观看全集完整版| 91国语精品自产拍| 国产日产欧美a一级在线| 亚洲福利在线观看| 国产精品视频在线免费观看| 婷婷激情5月天| 毛片在线看网站| 国产乱人伦精品一区二区三区| 懂色av粉嫩av蜜乳av| 在线视频精品免费| 日韩一区二区不卡| 欧美bbbbb性bbbbb视频| 久久免费视频1| 清纯唯美亚洲综合一区| 国内精品400部情侣激情| 美女视频a黄免费| 日本中文字幕在线观看视频| 91精品国产三级| 日本中文字幕视频一区| 曰本人一级毛片免费完整视频| 97人妻精品一区二区三区动漫| 日本网站在线免费观看视频| 91在线精品一区二区| 日本高清视频一区二区三区| 国产1区2区3区中文字幕| 青青伊人久久| 亚洲精品第一国产综合野草社区| 琪琪亚洲精品午夜在线| 国内精品视频一区| 日本在线视频观看| www免费视频观看在线| 国产精品视频午夜| 欧美日韩成人在线播放| 国产在线不卡av| 国产精品白丝jk黑袜喷水| 欧美性猛交xxxx乱大交蜜桃| 国产精品va无码一区二区| 欧美日韩电影一区二区三区| 一道在线中文一区二区三区| 免费国产麻豆传| 色欧美乱欧美15图片| 国产精品久久久av久久久| 欧美丰满熟妇bbbbbb| 国产精品一区hongkong| 超碰超碰97| 深夜福利一区二区| 亚洲欧美另类小说| 日本欧美爱爱爱| 国产又黄又大又粗的视频| 国内伊人久久久久久网站视频| 亚洲精品乱码久久久久久黑人| 欧美亚洲高清| 国产免费不卡av| 日韩精品专区在线影院观看| 男人精品网站一区二区三区| 偷偷www综合久久久久久久| 美女扒开腿让男人桶爽久久动漫| 日本怡春院一区二区| 美女日韩在线中文字幕| 中国极品少妇videossexhd| 色综合激情五月| 9l视频自拍九色9l视频成人| 国产一区视频在线看| 欧美日韩在线观看一区二区| 中文字幕一区二区三区最新| 囯产精品一品二区三区| 亚洲第一免费视频| 国产精品久久久久99| 在线观看黄网站免费继续| sedog在线观看| 日韩av影视大全| 怡春院在线视频| 国产97在线 | 亚洲| 久久免费精品视频在这里| 欧美白人猛性xxxxx交69| 久久精品国产一区二区三| 精品久久久久久久久久国产| 大片免费在线观看| 91精品国产九九九久久久亚洲| 亚洲剧情一区二区| av免费网站在线观看| 松下纱荣子在线观看| 国产香蕉久久| 中文字幕一区二区三区四区五区六区| 中文字幕国产亚洲| 91久久精品一区| av成人免费网站| 亚州av影院| 国产精品日日做人人爱| 国产精品伦一区| 精品人伦一区二区三区蜜桃免费| 99中文字幕一区| 波多野结衣在线aⅴ中文字幕不卡| 波多野结衣视频观看| 亚洲熟妇无码乱子av电影| 久久99精品久久久久久三级| 伦理天堂电影| 亚洲的天堂在线中文字幕| av漫画在线观看| 亚洲国产高清国产精品| 三级成人黄色影院| 国产麻豆高清视频在线第一页| 一区二区三区| www.黄色国产| 青娱乐精品视频在线| 免费高清视频在线观看| 91精品国产高久久久久久五月天|