當前位置:首頁 » 編程語言 » sqlvarchar索引
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlvarchar索引

發布時間: 2022-03-30 15:28:50

『壹』 sql 索引是針對select的還是針對where的

索引是根據你的條件來判斷是否使用索引的
舉個例子:有個D表,有D1(number),D2(varchar2),D3(number) 三個欄位,其中D1,D2欄位有作了索引。
select * from D ;--這時候盡管表中有索引,但是不會走索引,會全表掃描。
select D1 from D ;--這時候會走D1索引;
select * from D where D1=1,--這時候會走D1索引
select * from D where D2=1,--這時候不會走索引。盡管D2有索引,但是D2是字元型,where條件中是數值型,加上單引就可以走D2索引。
update ,delete和select 是同樣的。

『貳』 SQL表欄位如何建立索引難道就是添加SQL查詢語句

1、創建測試表,

create table test_index(id varchar2(20), v_date date);

『叄』 SQL中varchar和nvarchar有什麼區別

SQL中varchar和nvarchar區別:輸入不同,含義不同。

一、輸入不同:

varchar(4)可以輸入4個字線,也可以輸入兩個漢字。

nvarchar(4)可以輸四個漢字,也可以輸4個字母,但最多四個。

二、含義不同:

varchar(n)長度為n個位元組的可變長度且非Unicode的字元數據。n必須是一個介於1和8,000之間的數值。存儲大小為輸入數據的位元組的實際長度,而不是n個位元組。

nvarchar(n)包含n個字元的可變長度Unicode字元數據。n的值必須介於1與4,000之間。位元組的存儲大小是所輸入字元個數的兩倍。

字元數據類型

Varchar是變長字元數據,其長度不超過8KB。Char是定長字元數據,其長度最多為8KB。超過8KB的ASCII數據可以使用Text數據類型存儲。例如,因為Html文檔全部都是ASCII字元,並且在一般情況下長度超過8KB,所以這些文檔可以Text數據類型存儲在SQLServer中。

在SQLServer中,Unicode數據以Nchar、Nvarchar和Ntext數據類型存儲。使用這種字元類型存儲的列可以存儲多個字元集中的字元。當列的長度變化時,應該使用Nvarchar字元類型,這時最多可以存儲4000個字元。

以上內容參考:網路-SQL數據類型

『肆』 mysql有幾種索引類型使用索引時都有那些地方要注意sql優化原則是什麼

mysql的索引類型及使用索引時的注意事項有:

一、普通索引。這是最基本的索引,它沒有任何限制。它有以下幾種創建方式:

1、創建索引

代碼如下:

CREATE INDEX indexName ON mytable(username(length));

如果是CHAR,VARCHAR類型,length可以小於欄位實際長度;如果是BLOB和TEXT類型,必須指定 length,下同。

2、修改表結構

代碼如下:

ALTER mytable ADD INDEX [indexName] ON (username(length)) -- 創建表的時候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );

-- 刪除索引的語法:

DROP INDEX [indexName] ON mytable;

二、唯一索引。它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:

代碼如下:

CREATE UNIQUE INDEX indexName ON mytable(username(length))
-- 修改表結構
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
-- 創建表的時候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );

三、主鍵索引。它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引:

代碼如下:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );

當然也可以用 ALTER 命令。記住:一個表只能有一個主鍵。

四、組合索引。為了形象地對比單列索引和組合索引,為表添加多個欄位:

代碼如下:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL );

為了進一步榨取MySQL的效率,就要考慮建立組合索引。就是將 name, city, age建到一個索引里:

代碼如下:

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);[code]
建表時,usernname長度為 16,這里用 10。這是因為一般情況下名字的長度不會超過10,這樣會加速索引查詢速度,還會減少索引文件的大小,提高INSERT的更新速度。

如果分別在 usernname,city,age上建立單列索引,讓該表有3個單列索引,查詢時和上述的組合索引效率也會大不一樣,遠遠低於我們的組合索引。雖然此時有了三個索引,但MySQL只能用到其中的那個它認為似乎是最有效率的單列索引。

建立這樣的組合索引,其實是相當於分別建立了下面三組組合索引:usernname,city,age usernname,city usernname 為什麼沒有 city,age這樣的組合索引呢?這是因為MySQL組合索引「最左前綴」的結果。簡單的理解就是只從最左面的開始組合。並不是只要包含這三列的查詢都會用到該組合索引,下面的幾個SQL就會用到這個組合索引:

[code]
SELECT * FROM mytable WHREE username="admin" AND city="鄭州" SELECT * FROM mytable WHREE username="admin"

『伍』 SQL中varchar和nvarchar有什麼區別

varchar(n)
長度為 n 個位元組的可變長度且非 Unicode 的字元數據。n 必須是一個介於 1 和 8,000 之間的數值。存儲大小為輸入數據的位元組的實際長度,而不是 n 個位元組。

nvarchar(n)
包含 n 個字元的可變長度 Unicode 字元數據。n 的值必須介於 1 與 4,000 之間。位元組的存儲大小是所輸入字元個數的兩倍。

兩欄位分別有欄位值:我和coffee
那麼varchar欄位佔2×2+6=10個位元組的存儲空間,而nvarchar欄位佔8×2=16個位元組的存儲空間。

如欄位值只是英文可選擇varchar,而欄位值存在較多的雙位元組(中文、韓文等)字元時用nvarchar

上面是一個總結介紹,通過上面的介紹,可以知道。

varchar(4) 可以輸入4個字母,也可以輸入兩個漢字

nvarchar(4) 可以輸四個漢字,也可以輸4個字母,但最多四個
 
char、varchar、nchar、nvarchar的區別
 
對於程序中的string型欄位,SQLServer中有char、varchar、nchar、nvarchar四種類型來對應(暫時不考慮text和ntext),開建立資料庫中,對這四種類型往往比較模糊,這里做一下對比。
定長或變長
所謂定長就是長度固定的,當輸入的數據長度沒有達到指定的長度時將自動以英文空格在其後面填充,使長度達到相應的長度;有var前綴的,表示是實際存儲空間是變長的,比如varchar,nvarchar變長字元數據則不會以空格填充,比較例外的是,text存儲的也是可變長。
Unicode或非Unicode
資料庫中,英文字元只需要一個位元組存儲就足夠了,但漢字和其他眾多非英文字元,則需要兩個位元組存儲。如果英文與漢字同時存在,由於佔用空間數不同,容易造成混亂,導致讀取出來的字元串是亂碼。Unicode字元集就是為了解決字元集這種不兼容的問題而產生的,它所有的字元都用兩個位元組表示,即英文字元也是用兩個位元組表示。而前綴n就表示Unicode字元,比如nchar,nvarchar,這兩種類型使用了Unicode字元集。
基於以上兩點來看看欄位容量
char,varchar    最多8000個英文,4000個漢字
nchar,nvarchar    可存儲4000個字元,無論英文還是漢字
使用(個人偏好)
如果數據量非常大,又能100%確定長度且保存只是ansi字元,那麼char
能確定長度又不一定是ansi字元或者,那麼用nchar;
對於超大數據,如文章內容,使用nText
其他的通用nvarchar
char、varchar、nchar、nvarchar特點比較
CHAR
CHAR存儲定長數據很方便,CHAR欄位上的索引效率級高,比如定義char(10),那麼不論你存儲的數據是否達到了10個位元組,都要佔去10個位元組的空間。
VARCHAR
存儲變長數據,但存儲效率沒有CHAR高,如果一個欄位可能的值是不固定長度的,我們只知道它不可能超過10個字元,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。為什麼"+1"呢?這一個位元組用於保存實際使用了多大的長度。
從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。
TEXT
text存儲可變長度的非Unicode數據,最大長度為2^31-1(2,147,483,647)個字元。
NCHAR、NVARCHAR、NTEXT
這三種從名字上看比前面三種多了個"N"。和char、varchar比較起來,nchar、nvarchar最多存儲4000個字元,不論是英文還是漢字;而char、varchar最多能存儲8000個英文,4000個漢字。可以看出使用nchar、nvarchar數據類型時不用擔心輸入的字元是英文還是漢字,較為方便,但在

『陸』 Sqlserver2008刪除索引問題

請採用下列腳本

/*刪除索引*/

declare@tabletable(keyIdintidentity,name1varchar(100),name2varchar(100))

insertinto@table(name1,name2)
selectobject_name(object_id),namefromsys.indexeswherenamelike'IDX%'

declare@iint
declare@imaxint
declare@name1varchar(100)
declare@name2varchar(100)

set@i=1
select@imax=max(keyId)from@tabletwhile@i<=@imax
begin
set@name1=''
set@name2=''
select@name1=name1,@[email protected]=@i

print'dropindex['+@name2+']ontable['+@name1+']'
---exec('dropindex'+@name2+'ontable'+@name1)


set@i=@i+1
endgo


declare@tabletable(keyIdintidentity,namevarchar(100))

insertinto@table(name)selectnamefromsys.tableswheretype='u'


/*修理表結構*/

declare@iint
declare@imaxint
declare@namevarchar(100)

set@i=1
select@imax=max(keyId)from@tabletwhile@i<=@imax
begin
set@name=''
select@[email protected]=@iprint'altertable['+@name+']dropcolumn[_MASK_FROM_V2]'
--exec('altertable'+@name+'dropcolumn[_MASK_FROM_V2]')

set@i=@i+1
end

分兩步操作

1 刪除索引

2 修改表結構

有疑問及時溝通。

先在測試機上操作,請採納!

『柒』 mysql varchar索引和int索引性能哪個好

性能相當,mysql中區別性能的是採用哪種索引方式,而不是索引的數據類型。
MySQL的btree索引和hash索引的區別
hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像btree(B-Tree)索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的IO訪問,所以 hash 索引的查詢效率要遠高於 btree(B-Tree) 索引。

雖然 hash 索引效率高,但是 hash 索引本身由於其特殊性也帶來了很多限制和弊端,主要有以下這些。
(1)hash 索引僅僅能滿足=,<=>,IN,IS NULL或者IS NOT NULL查詢,不能使用范圍查詢。
由於 hash 索引比較的是進行 hash 運算之後的 hash 值,所以它只能用於等值的過濾,不能用於基於范圍的過濾,因為經過相應的 hash 演算法處理之後的 hash 值的大小關系,並不能保證和hash運算前完全一樣。

(2)hash 索引無法被用來避免數據的排序操作。
由於 hash 索引中存放的是經過 hash 計算之後的 hash 值,而且hash值的大小關系並不一定和 hash 運算前的鍵值完全一樣,所以資料庫無法利用索引的數據來避免任何排序運算;

(3)hash 索引不能利用部分索引鍵查詢。
對於組合索引,hash 索引在計算 hash 值的時候是組合索引鍵合並後再一起計算 hash 值,而不是單獨計算 hash 值,所以通過組合索引的前面一個或幾個索引鍵進行查詢的時候,hash 索引也無法被利用。

(4)hash 索引在任何時候都不能避免表掃描。
前面已經知道,hash 索引是將索引鍵通過 hash 運算之後,將 hash運算結果的 hash 值和所對應的行指針信息存放於一個 hash 表中,由於不同索引鍵存在相同 hash 值,所以即使取滿足某個 hash 鍵值的數據的記錄條數,也無法從 hash 索引中直接完成查詢,還是要通過訪問表中的實際數據進行相應的比較,並得到相應的結果。

(5)hash 索引遇到大量hash值相等的情況後性能並不一定就會比B-Tree索引高。
對於選擇性比較低的索引鍵,如果創建 hash 索引,那麼將會存在大量記錄指針信息存於同一個 hash 值相關聯。這樣要定位某一條記錄時就會非常麻煩,會浪費多次表數據的訪問,而造成整體性能低下

『捌』 如何使用SQL語言創建索引

直接在查詢分析器中就可以看,按F8,展開左邊的樹,選中一張便,看它下面的「索引」節點,裡面有你所有的聚簇索引和非聚簇索引

『玖』 sql server批量重建索引

語句沒有問題,就end後面要先close游標,語句:
USE MyDB;
DECLARE @name varchar(100)
DECLARE authors_cursor CURSOR FOR
Select [name] from sysobjects where xtype='u' order by id
OPEN authors_cursor
FETCH NEXT FROM authors_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC DBREINDEX (@name, '', 90)
FETCH NEXT FROM authors_cursor INTO @name
END
CLOSE TableCursor
deallocate authors_cursor

『拾』 sql效率優化通過索引

要看索引欄位的順序
如果a+b+c是唯一索引,那麼建再a+b索引,只會減慢修改表時的效率,對查詢沒有幫助。
如果建的是b+c或是c,而且查詢條件中也就只有b和c就有可能提高效率。
只要記得索引中欄位是有順序的,查詢時的條件如果沒有索引的第一個欄位,則不會再使用索引。
當然,SQL使不使用索引也跟表的行大小、數據量的實際大小以及重復數據的分布情況有關系,如果sqlserver分析出來掃描全表所需的時間比使用索引還快的話,就不會再使用索引了。