欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

減少mysql存儲列的方法

系統(tǒng) 4036 0

減少mysql存儲列的方法 | 網(wǎng)絡(luò)漁夫

減少mysql存儲列的方法

在設(shè)計數(shù)據(jù)庫時,我們會經(jīng)常碰到表示是非的字段,網(wǎng)絡(luò)漁夫-汪維曾在設(shè)計店鋪表時就遇到下列情況:

該店鋪有如下屬性:首先是否具有如圖所示的消費者保障服務(wù):

其次還有諸如是否屬于中關(guān)村商圈等等;在這里如果要表示上述的幾種屬性,按照常規(guī)做法我得設(shè)計7個字段;如果以后又增加了個如平臺保的服務(wù),我又得增加個字段,所以這樣做的缺點之一是不便于擴展;第二是占用的列太多,列太多會影響查找數(shù)據(jù)時的速度;第三就是這些字段由于是表示是非的值,所以做索引純屬浪費。

介于以上缺點,我拋棄了上述方法;在這里我只要一個字段就可以表示上述所有的屬性。

做法如下:

1.設(shè)計一個名為protect_str的字段,類型為 binary(12);其值默認(rèn)為 000000000000;這里設(shè)計為12位是為了以后擴展需要

這里我用從左到右的六位依次來表示6種消保,如000000000011表示如實描述和快速發(fā)貨;

為0的位置表示沒有這個屬性,如000000000001表示這家店沒有快速發(fā)貨這個屬性;反之則表示有;第7位表示是否屬于中關(guān)村商圈子。

2.查詢:

現(xiàn)在要查詢所有擁有如實描述屬性的店鋪,sql語句如下:

SELECT *

FROM `shops1`

WHERE (

protect_str &000000000001

) =1



查詢既擁有如實描述又擁有快速發(fā)貨屬性的店鋪,sql語句如下:

SELECT *

FROM `shops1`

WHERE (

`protect_str` &000000000011

) =11



但是當(dāng)執(zhí)行 SELECT 100101 &100001 時結(jié)果卻變成99841(至于為什么是這個結(jié)果,網(wǎng)絡(luò)漁夫還沒想清楚,如果有知道者請留言給我)

所以用這種方式來記錄也行不通。

所以換成將二進(jìn)制用十進(jìn)制來進(jìn)行存儲。比如當(dāng)二進(jìn)制的第一位為1(即為0000001)時表示如實描述,轉(zhuǎn)化為十進(jìn)制則為1

當(dāng)二進(jìn)制的第一位為1,第二位也為1(即為0000011)時表示如實描述,和快速發(fā)貨,轉(zhuǎn)化為十進(jìn)制存儲在數(shù)據(jù)庫中則為3;至于為什么為3(1*2的0次方+1*2的1次方);當(dāng)二進(jìn)制的第一位為1,第二位也為1,第三位也為1(即為0000111)時表示如實描述,和快速發(fā)貨,七天退換,轉(zhuǎn)化為十進(jìn)制存儲在數(shù)據(jù)庫中則為7;

當(dāng)一個店鋪既有如實描述,和快速發(fā)貨,七天退換保障又屬于中關(guān)村商圈時,則可用1000111來表示,轉(zhuǎn)換成十進(jìn)制存儲在數(shù)據(jù)庫中則為71

現(xiàn)在要查詢所有擁有如實描述屬性的店鋪,sql語句如下:

SELECT *

FROM `shops1`

WHERE (

protect_str &1

) =1

現(xiàn)在要查詢所有擁有快速發(fā)貨屬性的店鋪,sql語句如下:



SELECT *

FROM `shops1`

WHERE (

protect_str &2

) =2

現(xiàn)在要查詢所有屬于中關(guān)村在線商圈的店鋪,sql語句如下:



SELECT *

FROM `shops1`

WHERE (

`protect_str` &64

) =64

LIMIT 0 , 30

查詢所有既屬于中關(guān)村在線商圈又有如實描述服務(wù)保障的店鋪,sql語句如下:

SELECT *

FROM `shops1`

WHERE (

`protect_str` &65

) =65

LIMIT 0 , 30

如若以后有擴展則接著往高位上補數(shù)字就行了,比如說現(xiàn)在在對id=5的店鋪增加了一個平臺保障服務(wù)

則這時可對有此項服務(wù)的店鋪protect_str 字段的第八位值設(shè)為1即10000000轉(zhuǎn)化為十進(jìn)制即為128(1*2的7次方)

執(zhí)行如下語句:



UPDATE `test`.`shops1` SET `protect_str` = ( `protect_str` |128 ) WHERE `shops1`.`id` =5



即可將此字段值改為135;

綜上所述,凡是我們要加上某項服務(wù)的地方,我們用”|”或運算;凡是要查詢具有某項服務(wù)的地方我們用”&”與運算。

掌握了二進(jìn)制轉(zhuǎn)十進(jìn)制,還有查詢和更新,減少mysql存儲列將不再是問題。

下面給出試驗用的數(shù)據(jù)庫,大家可以用上述語句測試一下



CREATE TABLE `shops1` (

`id` int(10) unsigned NOT NULL auto_increment,

`shop_name` char(50) collate utf8_unicode_ci NOT NULL,

`protect_str` int(12) NOT NULL default '0',

`shop_id` int(11) unsigned NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='店鋪表' AUTO_INCREMENT=8 ;

?

--

-- 導(dǎo)出表中的數(shù)據(jù) `shops1`

--

INSERT INTO `shops1` VALUES (1, 'bestshop', 1, 13);

INSERT INTO `shops1` VALUES (3, 'firstshop', 2, 15);

INSERT INTO `shops1` VALUES (4, 'nihao', 71, 23);

INSERT INTO `shops1` VALUES (5, 'shis', 135, 34);

INSERT INTO `shops1` VALUES (6, 'ytshop', 6, 45);

INSERT INTO `shops1` VALUES (7, 'uushop', 65, 65);

?

?

This entry was posted in mysql and tagged , , , , , . Bookmark the permalink .

減少mysql存儲列的方法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产午夜精品一区二区三区嫩草 | 久久草在线精品视频99 | 五月婷婷丁香在线观看 | 狠狠做深爱婷婷久久一区 | 日韩avav | 红杏网站永久免费视频入口 | 中文字幕亚洲一区二区三区 | 一级片在线免费观看视频 | 日本理论片中文在线观看2828 | 亚洲国产香蕉视频欧美 | 久操网址 | 午夜久久久 | 免费观看成人拍拍拍1000视频 | 国产日韩久久久精品影院首页 | 碰碰碰人人澡人人爱摸 | 免费久久一级欧美特大黄 | 精品欧美高清一区二区免费 | 日本黄色大片免费 | 高清激情小视频在线观看 | 波多野结衣在线视频观看 | 亚欧视频在线观看 | 精品欧美乱码久久久久久 | 波多野结衣久久一区二区 | 久一久久 | 日韩成人免费视频播放 | 国产高清美女一级毛片 | 欧美二区视频 | 久久久9999久久精品小说 | 美国一级片免费看 | 5c5c5c精品视频在线观看 | 青草青草久热精品视频在线网站 | 欧美午夜不卡 | 五月天婷婷在线视频国产在线 | 奇米影视第七色 | 亚洲午夜精品一区二区三区他趣 | 天天看片天天a免费观看 | 综合网视频 | 亚洲第一视频区 | 国产成人免费视频网站高清观看视频 | 免费的黄色网 | 青草悠悠视频在线观看 |