建表注意事項:對于建表大家都不陌生,這里主要說明一下幾點注意實現(xiàn):1、大數(shù)據(jù)字段最好剝離出單獨的表,以便影響性能2、使用varchar,代替char,這是因為varchar會動態(tài)分配長度,char指定為20,即時你存儲字符“1”,它依然是20的長度 3、給表建立主鍵,看到好多表沒主鍵,這在查詢和索引定義上將有一定的影響4、避免表字段運行為null,如果不知道添加什么值,建議設(shè)置默認值,特別int類型,比如默認值為0,在索引查詢上,效率立顯。
5、建立索引,聚集索引則意味著數(shù)據(jù)的物理存儲順序,最好在唯一的,非空的字段上建立,其它索引也不是越多越好,索引在查詢上優(yōu)勢顯著,在頻繁更新數(shù)據(jù)的字段上建立聚集索引,后果很嚴重,插入更新相當忙。6、組合索引和單索引的建立,要考慮查詢實際和具體模式。
建表注意事項:
對于建表大家都不陌生,這里主要說明一下幾點注意實現(xiàn):
1、大數(shù)據(jù)字段最好剝離出單獨的表,以便影響性能
2、使用varchar,代替char,這是因為varchar會動態(tài)分配長度,char指定為20,即時你存儲字符“1”,它依然是20的長度
3、給表建立主鍵,看到好多表沒主鍵,這在查詢和索引定義上將有一定的影響
4、避免表字段運行為null,如果不知道添加什么值,建議設(shè)置默認值,特別int類型,比如默認值為0,在索引查詢上,效率立顯。
5、建立索引,聚集索引則意味著數(shù)據(jù)的物理存儲順序,最好在唯一的,非空的字段上建立,其它索引也不是越多越好,索引在查詢上優(yōu)勢顯著,在頻繁更新數(shù)據(jù)的字段上建立聚集索引,后果很嚴重,插入更新相當忙。
6、組合索引和單索引的建立,要考慮查詢實際和具體模式.
1.在創(chuàng)建數(shù)據(jù)庫時應(yīng)該注意哪些問題?數(shù)據(jù)庫在創(chuàng)建的時候可以設(shè)置他的擴展大小,但是數(shù)據(jù)庫的大小不是固定的 它的數(shù)據(jù)實時地不斷的增大.注意不要到MASTER數(shù)據(jù)庫中創(chuàng)建用用戶對象.2.怎樣確定數(shù)據(jù)庫的大小?創(chuàng)建數(shù)據(jù)庫時可以創(chuàng)建其大小3.比較用不同方法創(chuàng)建數(shù)據(jù)庫時,確定數(shù)據(jù)文件和日志文件的方法。
4.可以在MASTER數(shù)據(jù)庫中創(chuàng)建用戶對象嗎?為什么?不要在MASTER數(shù)據(jù)庫中創(chuàng)建任何用戶對象,因為MASTER數(shù)據(jù)庫包含系統(tǒng)表,這些系統(tǒng)表存儲SQL SERVER所用的系統(tǒng)信息5.可以用哪些方法修改數(shù)據(jù)庫?1)打開企業(yè)管理器,展開服務(wù)器組,然后展開SQL SERVER服務(wù)器.2)在”數(shù)據(jù)庫”文件夾中,右擊要更改的數(shù)據(jù)庫(如:bbsdb),然后單擊”屬性”命令,打開數(shù)據(jù)庫屬性對話框用TRANSANCT-SQL也能修改數(shù)據(jù)庫語句為:ALTER DATABASE。
如果你正在負責一個基于SQL Server的項目,或者你剛剛接觸SQL Server,你都有可能要面臨一些數(shù)據(jù)庫性能的問題,這篇文章會為你提供一些有用的指導(dǎo)(其中大多數(shù)也可以用于其它的DBMS)。
在這里,我不打算介紹使用SQL Server的竅門,也不能提供一個包治百病的方案,我所做的是總結(jié)一些經(jīng)驗----關(guān)于如何形成一個好的設(shè)計。 這些經(jīng)驗來自我過去幾年中經(jīng)受的教訓(xùn),一直來,我看到許多同樣的設(shè)計錯誤被一次又一次的重復(fù)。
你了解你用的工具嗎?不要輕視這一點,這是我在這篇文章中講述的最關(guān)鍵的一條。也許你也看到有很多的SQL Server程序員沒有掌握全部的T-SQL命令和SQL Server提供的那些有用的工具。
“什么?我要浪費一個月的時間來學習那些我永遠也不會用到的SQL命令???”,你也許會這樣說。對的,你不需要這樣做。
但是你應(yīng)該用一個周末瀏覽所有的T-SQL命令。在這里,你的任務(wù)是了解,將來,當你設(shè)計一個查詢時,你會記起來:“對了,這里有一個命令可以完全實現(xiàn)我需要的功能”,于是,到MSDN查看這個命令的確切語法。
不要使用游標讓我再重復(fù)一遍:不要使用游標。如果你想破壞整個系統(tǒng)的性能的話,它們倒是你最有效的首選辦法。
大多數(shù)的初學者都使用游標,而沒有意識到它們對性能造成的影響。它們占用內(nèi)存,還用它們那些不可思議的方式鎖定表,另外,它們簡直就像蝸牛。
而最糟糕的是,它們可以使你的DBA所能做的一切性能優(yōu)化等于沒做。 不知你是否知道每執(zhí)行一次FETCH就等于執(zhí)行一次SELECT命令?這意味著如果你的游標有10000條記錄,它將執(zhí)行10000次SELECT!如果你使用一組SELECT、UPDATE或者DELETE來完成相應(yīng)的工作,那將有效率的多。
初學者一般認為使用游標是一種比較熟悉和舒適的編程方式,可很不幸,這會導(dǎo)致糟糕的性能。 顯然,SQL的總體目的是你要實現(xiàn)什么,而不是怎樣實現(xiàn)。
我曾經(jīng)用T-SQL重寫了一個基于游標的存儲過程,那個表只有100,000條記錄,原來的存儲過程用了40分鐘才執(zhí)行完畢,而新的存儲過程只用了10秒鐘。在這里,我想你應(yīng)該可以看到一個不稱職的程序員究竟在干了什么!??!我們可以寫一個小程序來取得和處理數(shù)據(jù)并且更新數(shù)據(jù)庫,這樣做有時會更有效。
記?。簩τ谘h(huán),T-SQL無能為力。
新建表命令: create table yg1 ( 姓名 varchar (8), 性別 char (2), 年齡 int, 籍貫 varchar (5), 電話 varchar (11), 工資 money, 婚否 bit ) 引入: 數(shù)據(jù)類型: 1。
數(shù)值型:數(shù)字 2。整形:整數(shù) a。
Bigint 大整形 -2^63→2^63-1 八個字節(jié) b。 int 普通整形 -2^31→2^31-1 四個字節(jié) c。
smallint 小整形 -2^15→2^15-1 二個字節(jié) d。 tinyint 短整形 0→255 一個字節(jié) 3。
字符串型: a。 char(n) 固定字符型 n代表字符串的長度,不足n位,系統(tǒng)自動補充空格,滿足,則截除。
b。 varchar (n) 可變字符型 n代表字符串的長度,不足n位,系統(tǒng)以實際錄入為準,多余自動截除。
4。時間日期型: a。
datetime 表示范圍 時 分 秒 毫秒 b。 smalldatetime 時 分 秒 5。
貨幣型: a。 money b。
smallmoney 6。邏輯型: bit 位 0或1 (1位) 習慣用0代表"真"1代表"假" 接下來繼續(xù) 1。
增加字段: alter table yg add 郵編 char (6) --注:數(shù)據(jù)類型必須包括 2。 刪除字段: alter table yg drop column 年齡 3。
修改字段屬性: alter table yg alter column 性別 char (10) 4。 字段改名: sp_rename 例如: 將年齡改為age sp_reneme 'yg。
年齡','age' 表改名: sp_rename yg,newyg --yg為現(xiàn)有表名,newyg為新表名 刪除表: drop table 表名 例如: drop table yg 刪除多個表: drop table yg,yg1,yg2。
首先說說怎么用SQL語句創(chuàng)建數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫的語句有如下幾種:1. CREATE TABLE(創(chuàng)建新表)2. CREATE INDEX(增加索引)3. DROP INDEX(刪除索引)4. CONSTRAINT(約束語句)5. ALTER TABLE(修改表)6. DROP TABLE(刪除表) CREATE TABLE語句:在數(shù)據(jù)庫中生成新表,表中字段的類型能夠為:INTEGER(整型)、LONG(長整型)、SINGLE(單精度浮點數(shù))、DOUBLE(雙精度浮點數(shù))、DATETIME(日期型,也能夠?qū)懗蒁ATE)、BIT(布爾型)、TEXT(字符串型,最大255個字節(jié))、MEMO(字符串型,最大可達1.2G字節(jié))、COUNTER(自動遞增長整型,可確定記錄的唯一性)、CURRENCY(貨幣型,精確到小數(shù)點左邊15位,右邊4位)、BINARY(字節(jié)型,最大255個)、LONGBINARY(用于OLE對象)、GUID(全局唯一標識符)。
生成表NewTable,該表有文本字段Field1和整型字段Field2,表名和字段名能夠隨便您取,不區(qū)分大小寫,但是,有些保留字不能用作表名字段名,比如Number CREATE TABLE NewTable(Field1 TEXT(30), Field2 INTEGER); CREATE INDEX語句:INDEX是為了加快查找記錄的速度,或是為了增加字段約束關(guān)系而配置的。創(chuàng)建索引語句執(zhí)行前表中能夠有記錄,但存在的記錄必須滿足該索引語句的約束關(guān)系,否則語句不能執(zhí)行,另外要注意的是在同一個數(shù)據(jù)庫中(而不但僅是在同一個表中),索引名不能相同,否則語句也會失敗。
生成字段Field1的索引字段NewIndex,兩條語句作用相同 生成后Field1字段能夠有相同的值,能夠有空值(NULL) CREATE INDEX NewIndex ON NewTable (Field1); CREATE INDEX NewIndex ON NewTable (Field1) WITH IGNORE NULL; 生成字段Field1的索引字段NewIndex,注意,每個表里只能有一個主索引(PRIMARY)。生成后Field1字段不能有相同的值,不能有空值(當然,假如是TEXT類型,能夠有一個空串,但是空串不是空值) CREATE INDEX NewIndex ON NewTable(Field1) WITH PRIMARY; 字段Field1不能有相同的值,但能夠有空值(兩個空值不算相同的值) CREATE UNIQUE INDEX NewIndex ON NewTable(Field1); 字段Field1能夠有相同的值,但不能有空值 CREATE INDEX NewIndex ON NewTable(Field2) WITH DISALLOW NULL 能夠在索引語句中加入ASC(升序)或DESC(降序)來控制記錄排列順序假如不使用順序字,SQL則默認使用ASC順序 CREATE INDEX NewIndex ON NewTable(Field1 ASC, Field2 DESC); DROP INDEX語句:刪除表NewTable中的索引NewIndex,語句執(zhí)行前索引NewIndex必須存在 DROP INDEX NewIndex ON NewTable; CONSTRAINT語句:CONSTRAINT子句用于創(chuàng)建數(shù)據(jù)庫完整性的索引,他和INDEX語句作用相同,有些地方能夠互相替代,他能夠使用PRIMARY KEY(主關(guān)鍵字),UNIQUE(唯一)和FOREIGN KEY(外部關(guān)鍵字),和INDEX相比不能使用IGNOR NULL和DISALLOW NULL,但多了FOREIGN KEY(這也是他最強大的地方)。
另外, CONSTRAINT語句必須和CREATE TABLE或ALTER TABLE語句一起使用。生成表NewTable,主關(guān)鍵字段是Field1,主索引是NewPK CREATE TABLE NewTable(Field1 LONG CONSTRAINT NewPK PRIMARY KEY, Field2 MEMO, Field3 DATETIME); 生成索引為NewUK的表NewTable,Field1不能有相同值,能夠有空值 CREATE TABLE NewTable(Field1 INTEGER CONSTRAINT NewUK UNIQUE); 生成多列的主索引,兩條記錄的Field1和Field2不能全部相同,也不能為空值 CREATE TABLE NewTable(Field1 INTEGER, Field2 CURRENCY, CONSTRAINT NewPK PRIMARY KEY(Field1, Field2)); 生成多列的UNIQUE索引,兩條記錄的Field1和Field2不能全部相同注意,假如兩條記錄其中一個字段相同而另一個字段都是空值,那也算兩個字段不同 CREATE TABLE NewTable(Field1 INTEGER, Field2 CURRENCY, CONSTRAINT NewUK UNIQUE(Field1, Field2)); 要在幾個不同的表之間建立聯(lián)系,就要使用FOREIGN KEY REFERENCES子句,他能夠限定某個表的字段內(nèi)容必須存在于另外一個表中。
第一個例子:首先,生成主關(guān)鍵字段為Field1的表NewTable1 CREATE TABLE NewTable1(Field1 INTEGER CONSTRAINT NewPK PRIMARY KEY); 然后,再生成外部索引,兩個表的Field1必須類型相同,并且第一個表的Field1是主關(guān)鍵字段或UNIQUE字段。生成外部索引后,表NewTable2要增加記錄,他的Field1字段值必須已存在于表NewTable1的Field1字段中。
下面兩條語句作用相同,因為Field1是NewTable1的主關(guān)鍵字段,能夠省略不寫 CREATE TABLE NewTable2(Field1 INTEGER CONSTRAINT NewFK REFERENCES NewTable1); CREATE TABLE NewTable2(Field1 INTEGER CONSTRAINT NewFK REFERENCES NewTable1(Field1)); 第二個例子:首先,生成主關(guān)鍵字段為Field1和Field2的表NewTable1 CREATE TABLE NewTable1(Field1 INTEGER, Field2 TEXT(20), 。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:3.114秒