在列侯面加identity(1,1)
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)本溪免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
例如
create table a
(
a int identity(1,1),
name varchar(50)
)
選擇標(biāo)識(shí)符(identifier)
為標(biāo)識(shí)列(identifier column)選擇合適的數(shù)據(jù)類型非常重要 一般來(lái)說(shuō)更有可能用標(biāo)識(shí)列與其他值進(jìn)行比較(例如 在關(guān)聯(lián)操作中) 或者通過(guò)標(biāo)識(shí)列尋找其他列 標(biāo)識(shí)列也可能在另外的表中作為外鍵使用 所以為標(biāo)識(shí)列選擇數(shù)據(jù)類型時(shí) 應(yīng)該選擇跟關(guān)聯(lián)表中的對(duì)應(yīng)列一樣的類型(正如我們?cè)诒菊略缧r(shí)候所論述的一樣 在相關(guān)的表中使用相同的數(shù)據(jù)類型是個(gè)好主意 因?yàn)檫@些列很可能在關(guān)聯(lián)中使用)
當(dāng)選擇標(biāo)識(shí)列的類型時(shí) 不僅僅需要考慮存儲(chǔ)類型 還需要考慮MySQL 對(duì)這種類型怎么執(zhí)行計(jì)算和比較 例如 MySQL 在內(nèi)部使用整數(shù)存儲(chǔ)ENUM 和SET 類型 然后在做比較操作時(shí)轉(zhuǎn)換為字符串
一旦選定了一種類型 要確保在所有關(guān)聯(lián)表中都使用同樣的類型 類型之間需要精確匹配 包括像UNSIGNED 這樣的屬性注 混用不同數(shù)據(jù)類型可能導(dǎo)致性能問(wèn)題 即使沒(méi)有性能影響 在比較操作時(shí)隱式類型轉(zhuǎn)換也可能導(dǎo)致很難發(fā)現(xiàn)的錯(cuò)誤 這種錯(cuò)誤可能會(huì)很久以后才突然出現(xiàn) 那時(shí)候可能都已經(jīng)忘記是在比較不同的數(shù)據(jù)類型
在可以滿足值的范圍的需求 并且預(yù)留未來(lái)增長(zhǎng)空間的前提下 應(yīng)該選擇最小的數(shù)據(jù)類型 例如有一個(gè)state_id 列存儲(chǔ)美國(guó)各州的名字注 就不需要幾千或幾百萬(wàn)個(gè)值 所以不需要使用INT TINYINT 足夠存儲(chǔ) 而且比INT 少了 個(gè)字節(jié) 如果用這個(gè)值作為其他表的外鍵 個(gè)字節(jié)可能導(dǎo)致很大的性能差異 下面是一些小技巧 整數(shù)類型
整數(shù)通常是標(biāo)識(shí)列最好的選擇 因?yàn)樗鼈兒芸觳⑶铱梢允褂肁UTO_INCREMENT
ENUM 和SET 類型
對(duì)于標(biāo)識(shí)列來(lái)說(shuō) EMUM 和SET 類型通常是一個(gè)糟糕的選擇 盡管對(duì)某些只包含固定狀態(tài)或者類型的靜態(tài) 定義表 來(lái)說(shuō)可能是沒(méi)有問(wèn)題的 ENUM 和SET 列適合存儲(chǔ)固定信息 例如有序的狀態(tài) 產(chǎn)品類型 人的性別
舉個(gè)例子 如果使用枚舉字段來(lái)定義產(chǎn)品類型 也許會(huì)設(shè)計(jì)一張以這個(gè)枚舉字段為主鍵的查找表(可以在查找表中增加一些列來(lái)保存描述性質(zhì)的文本 這樣就能夠生成一個(gè)術(shù)語(yǔ)表 或者為網(wǎng)站的下拉菜單提供有意義的標(biāo)簽) 這時(shí) 使用枚舉類型作為標(biāo)識(shí)列是可行的 但是大部分情況下都要避免這么做
字符串類型如果可能 應(yīng)該避免使用字符串類型作為標(biāo)識(shí)列 因?yàn)樗鼈兒芟目臻g 并且通常比數(shù)字類型慢 尤其是在MyISAM 表里使用字符串作為標(biāo)識(shí)列時(shí)要特別小心
MyISAM 默認(rèn)對(duì)字符串使用壓縮索引 這會(huì)導(dǎo)致查詢慢得多 在我們的測(cè)試中 我們注意到最多有 倍的性能下降
對(duì)于完全 隨機(jī) 的字符串也需要多加注意 例如MD () SHA () 或者UUID() 產(chǎn)生的字符串 這些函數(shù)生成的新值會(huì)任意分布在很大的空間內(nèi) 這會(huì)導(dǎo)致INSERT 以及一些SELECT 語(yǔ)句變得很慢注 :
因?yàn)椴鍄 入值會(huì)隨機(jī)地寫(xiě)到索引的不同位置 所以使得INSERT語(yǔ)句更慢 這會(huì)導(dǎo)致頁(yè)分裂 磁盤(pán)隨機(jī)訪問(wèn) 以及對(duì)于聚簇存儲(chǔ)引擎產(chǎn)生聚簇索引碎片 關(guān)于這一點(diǎn)第 章有更多的討論
SELECT語(yǔ)句會(huì)變得更慢 因?yàn)檫壿嬌舷噜彽男袝?huì)分布在磁盤(pán)和內(nèi)存的不同地方
隨機(jī)值導(dǎo)致緩存對(duì)所有類型的查詢語(yǔ)句效果都很差 因?yàn)闀?huì)使得緩存賴以工作的訪問(wèn)局部性原理失效 如果整個(gè)數(shù)據(jù)集都一樣的 熱 那么緩存任何一部分特定數(shù)據(jù)到內(nèi)存都沒(méi)有好處 如果工作集比內(nèi)存大 緩存將會(huì)有很多刷新和不命中
如果存儲(chǔ)UUID 值 則應(yīng)該移除 符號(hào) 或者更好的做法是 用UNHEX() 函數(shù)轉(zhuǎn)換UUID 值為 字節(jié)的數(shù)字 并且存儲(chǔ)在一個(gè)BINARY( ) 列中 檢索時(shí)可以通過(guò)HEX()函數(shù)來(lái)格式化為十六進(jìn)制格式
UUID() 生成的值與加密散列函數(shù)例如SHA () 生成的值有不同的特征 UUID 值雖然分布也不均勻 但還是有一定順序的 盡管如此 但還是不如遞增的整數(shù)好用
當(dāng)心自動(dòng)生成的schema
我們已經(jīng)介紹了大部分重要數(shù)據(jù)類型的考慮(有些會(huì)嚴(yán)重影響性能 有些則影響較小) 但是我們還沒(méi)有提到自動(dòng)生成的schema 設(shè)計(jì)有多么糟糕
寫(xiě)得很爛的schema 遷移程序 或者自動(dòng)生成schema 的程序 都會(huì)導(dǎo)致嚴(yán)重的性能問(wèn)題 有些程序存儲(chǔ)任何東西都會(huì)使用很大的VARCHAR 列 或者對(duì)需要在關(guān)聯(lián)時(shí)比較的列使用不同的數(shù)據(jù)類型 如果schema 是自動(dòng)生成的 一定要反復(fù)檢查確認(rèn)沒(méi)有問(wèn)題
對(duì)象關(guān)系映射(ORM)系統(tǒng)(以及使用它們的 框架 )是另一種常見(jiàn)的性能噩夢(mèng) 一些ORM 系統(tǒng)會(huì)存儲(chǔ)任意類型的數(shù)據(jù)到任意類型的后端數(shù)據(jù)存儲(chǔ)中 這通常意味著其沒(méi)有設(shè)計(jì)使用更優(yōu)的數(shù)據(jù)類型來(lái)存儲(chǔ) 有時(shí)會(huì)為每個(gè)對(duì)象的每個(gè)屬性使用單獨(dú)的行 甚至使用基于時(shí)間戳的版本控制 導(dǎo)致單個(gè)屬性會(huì)有多個(gè)版本存在
這種設(shè)計(jì)對(duì)開(kāi)發(fā)者很有吸引力 因?yàn)檫@使得他們可以用面向?qū)ο蟮姆绞焦ぷ?不需要考慮數(shù)據(jù)是怎么存儲(chǔ)的 然而 對(duì)開(kāi)發(fā)者隱藏復(fù)雜性 的應(yīng)用通常不能很好地?cái)U(kuò)展 我們建議在用性能交換開(kāi)發(fā)人員的效率之前仔細(xì)考慮 并且總是在真實(shí)大小的數(shù)據(jù)集上做測(cè)試 這樣就不會(huì)太晚才發(fā)現(xiàn)性能問(wèn)題
返回目錄 高性能MySQL
編輯推薦
ASP NET MVC 框架揭秘
Oracle索引技術(shù)
ASP NET開(kāi)發(fā)培訓(xùn)視頻教程
lishixinzhi/Article/program/MySQL/201311/29682
你是想改表結(jié)構(gòu)還是插入數(shù)據(jù)?
表結(jié)構(gòu):右鍵點(diǎn)中表,選設(shè)計(jì)表,移動(dòng)到最底部一條,“創(chuàng)建欄位”將在這之后增加一列;“插入欄位”將在這列之前增加一列。
插入數(shù)據(jù):雙擊打開(kāi)表,下面有個(gè)“+”的符號(hào),點(diǎn)一下,增加一條記錄,然后再點(diǎn)一下下面的對(duì)鉤保存數(shù)據(jù)。
navicat 很簡(jiǎn)單的。慢慢熟悉吧,記得去把它漢化哦。
使用auto_increment修飾要自增的列。實(shí)例:create table stu
(stuid int auto_increment primary key,
stuname varchar(20)) 追問(wèn)這個(gè)我之前就試過(guò)了,要手動(dòng)插入id值,如果不插入就報(bào)錯(cuò)。
----------------------------------------------------
你插入的語(yǔ)句是什么。上面的表能實(shí)現(xiàn)自增id
標(biāo)題名稱:mysql中標(biāo)識(shí)列怎么弄 mysql 顯示列名
路徑分享:http://vcdvsql.cn/article30/ddihcso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣、企業(yè)建站、外貿(mào)建站、品牌網(wǎng)站制作、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)