Ⅰ 在sql中怎樣用指定索引查詢
一般來說在條件中使用索引對應的第一個欄位就可能會用到該索引。
微軟的SQL SERVER提供了兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。
索引是資料庫中重要的數據結構,它的根本目的就是為了提高查詢效率。現在大多數的資料庫產品都採用IBM最先提出的ISAM索引結構。
數據搜索實現角度
索引也是另外一類文件/記錄,它包含著可以指示出相關數據記錄的各種記錄。其中,每一索引都有一個相對應的搜索碼,字元段的任意一個子集都能夠形成一個搜索碼。這樣,索引就相當於所有數據目錄項的一個集合,它能為既定的搜索碼值的所有數據目錄項提供定位所需的各種有效支持。
以上內容參考:網路-資料庫索引
Ⅱ mysql怎麼添加索引sql語句
工具:mysql資料庫創建一個user的表裡邊的欄位
1.普通索引 添加INDEX
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
下面演示下給user表的name欄位添加一個索引
2.主鍵索引 添加PRIMARY KEY
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
3.唯一索引 添加UNIQUE
ALTER TABLE `table_name` ADD UNIQUE ( `column` )
4.全文索引 添加FULLTEXT
ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.如何添加多列索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
Ⅲ 如何使用sql語句增加普通索引
1、主鍵就是聚集索引;
2、只要建立索引就能顯著提高查詢速度;
3、把所有需要提高查詢速度的欄位都加進聚集索引,以提高查詢速度。
注意事項:不要索引常用的小型表,不要把社會保障號碼或身份證號碼選作鍵,不要用用戶的鍵。
Ⅳ 如何使用sql語句增加普通索引
create clustered index xxx on yyy
其中,將普通索引理解為聚集索引,即clustered,xxx為索引名,yyy為表名。
Ⅳ 如何優化sql語句,怎麼加索引
1、主鍵就是聚集索引2、只要建立索引就能顯著提高查詢速度3、把所有需要提高查詢速度的欄位都加進聚集索引,以提高查詢速度(四)其他書上沒有的索引使用經驗總結1、用聚合索引比用不是聚合索引的主鍵速度快2、用聚合索引比用一般的主鍵作orderby時速度快,特別是在小數據量情況下3、使用聚合索引內的時間段,搜索時間會按數據占整個數據表的百分比成比例減少,而無論聚合索引使用了多少個4、日期列不會因為有分秒的輸入而減慢查詢速度(五)其他注意事項1.不要索引常用的小型表2.不要把社會保障號碼(SSN)或身份證號碼(ID)選作鍵3.不要用用戶的鍵4.不要索引memo/notes欄位和不要索引大型文本欄位(許多字元)5.使用系統生成的主鍵二、改善SQL語句1、Like語句是否屬於SARG取決於所使用的通配符的類型2、or會引起全表掃描3、非操作符、函數引起的不滿足SARG形式的語句4、IN的作用相當與OR5、盡量少用NOT6、exists和in的執行效率是一樣的7、用函數charindex()和前面加通配符%的LIKE執行效率一樣8、union並不絕對比or的執行效率高9、欄位提取要按照「需多少、提多少」的原則,避免「select*」10、count(*)不比count(欄位)慢11、orderby按聚集索引列排序效率最高12、高效的TOP
Ⅵ sql資料庫欄位怎麼加全文索引
對表設置全文索引應用如下步驟:
1.選擇要建立全文索引的表,然後選擇: Full-Text Index Table ->Define Full-Text Indexing on a table
2.系統會啟動SQL Server Full-Text Index 向導。
3.選擇一個唯一索引。
4.選擇一個要建立索引的欄位。
5.選擇catalog。
6.選擇更新索引計劃(由於全文索引和普通索引表不同,不能自動更新,所以得加入一個計劃
)。
7.Finish。
8.選擇在資料庫Full-text catalogs中里的新建立的catalog,然後運行Start Population,Full Population 就可以了。
Ⅶ SQL表欄位如何建立索引難道就是添加SQL查詢語句
不是添加SQL查詢語句,而是添加創建索引的語句,例如:
1、創建主鍵索引
alter
table
table_name
add
constraint
index_name
primary
key
(col1);
2、創建唯一鍵索引
create
unique
index
uk_name
on
table_name
(col2);
3、創建普通索引
create
index
index_name
on
table_name
(col3);
Ⅷ 一般sql資料庫中,什麼情況該加索引
經常在查詢中作為where條件的欄位,經常作為連表查詢的條件欄位都應該加索引,不論數據量多少,都應該事先加好索引
Ⅸ 在SQLServer中使用索引的技巧
在SQL Server中 為了查詢性能的優化 有時我們就需要對數據表通過建立索引的方式 目的主要是根據查詢要求 迅速縮小查詢范圍 避免全表掃描
索引有兩種類型 分別是聚集索引(clustered index 也稱聚類索引 簇集索引)和非聚集索引(nonclustered index 也稱非聚類索引 非簇集索引)
聚集索引在一個表中只能有一個 默認情況下在主鍵建立的時候創建 它是規定數據在表中的物理存儲順序 我們也可以取消主鍵的聚集索引 所以必須考慮資料庫可能用到的查詢類型以及使用的最為頻繁的查詢類型 對其最常用的一個欄位或者多個欄位建立聚集索引或者組合的聚集索引 它就是SQL Server會在物理上按升序(默認)或者降序重排數據列 這樣就可以迅速的找到被查詢的數據
非聚集索主要是數據存儲在一個地方 索引存儲在另一個地方 索引帶有指針指向數據的存儲位置 索引中的項目按索引鍵值的順序存儲 而表中的信息按另一種順序存儲 可以在一個表格中使用高達 個非聚集的索引 在查詢的過程中先對非聚集索引進行搜索 找到數據值在表中的位置 然後從該位置直接檢索數據 這使非聚集索引成為精確匹配查詢的最佳方法 因為索引包含描述查詢所搜索的數據值在表中的精確位置的條目
所以我們在選擇創建聚集索引的時候要注意以下幾個方面
) 對表建立主鍵時 就會為主鍵自動添加了聚集索引 如自動編號欄位 而我們沒有必要把聚集索引浪費在主鍵上 除非你只按主鍵查詢 所以會把聚集索引設置在按條件查詢頻率最高的那個欄位或者組合的欄位
) 索引的建立要根據實際應用的需求來進行 並非是在任何欄位上建立索引就能提高查詢速度 聚集索引建立遵循下面幾個原則
包含大量非重復值的列
使用下列運算符返回一個范圍值的查詢 BEEEN > >= < 和 <=
被連續訪問的列
返回大型結果集的查詢
經常被使用聯接或 GROUP BY 子句的查詢訪問的列;一般來說 這些是外鍵列 對ORDER BY 或 GROUP BY 子句中指定的列進行索引 可以使 SQL Server 不必對數據進行排序 因為這些行已經排序 這樣可以提高查詢性能
OLTP 類型的應用程序 這些程序要求進行非常快速的單行查找(一般通過主鍵) 應在主鍵上創建聚集索引
舉例來說 銀行交易日誌中對交易日期建立聚合索引 數據物理上按順序存於數據頁上 重復值也排列在一起 因而在范圍查找時 可以先找到這個范圍的起末點 且只在這個范圍內掃描數據頁 避免了大范圍掃描 提高了查詢速度 而如果我們對員工的基本信息表中性別的欄位列上建立聚集索引 就完全沒有必要 因為內容里只涉及到 男 與 女 兩個不同值
) 在聚集索引中按常用的組合欄位建立索引 形成復合索引 一般在為表建立多個主鍵的時候就會產生 如果一個表中的數據在查詢時有多個欄位總是同時出現則這些欄位就可以作為復合索引 這樣能形成索引覆蓋 提高where語句的查詢效率
)索引對查詢有一這的優化 但由於改變一個表的內容 將會引起索引的變化 頻繁的對數據操作如insert update delete語句將導致系統花費較大的代價進行索引更新 引起整體性能的下降 一般來講 在對查詢性能的要求高於對數據維護性能要求時 應該盡量使用索引 有時在這種操作資料庫比較頻繁的某些極端情況下 可先刪除索引 再對資料庫表更新大量數據 最後再重建索引 新建立的索引總是比較好用
索引在使用了長久的時候 就會產生很多的碎片 查詢的性能就會受到影響 這時候有兩種方法解決 一是利用DBCC INDEXDEFRAG整理索引碎片 還有就是利用DBCC DBREINDEX重建索引
DBCC INDEXDEFRAG 命令是聯機操作 所以索引只有在該命令正在運行時才可用 而且可以在不丟失已完成工作的情況下中斷該操作 這種方法的缺點是在重新組織數據方面沒有聚集索引的除去/重新創建操作有效
重新創建聚集索引將對數據進行重新組織 其結果是使數據頁填滿 填滿程度可以使用 FILLFACTOR 選項進行配置 這種方法的缺點是索引在除去/重新創建周期內為離線狀態 並且操作屬原子級 如果中斷索引創建 則不會重新創建該索引
我們來看看索引重建使用的方法
語法 DBCC DBREINDEX ( [ TableName [ index_name [ fillfactor ] ] ] )
參數 TableName
是要重建其指定的索引的表名 資料庫 所有者和表名必須符合標識符的規則 有關更多信息 請參見使用標識符 如果提供 database 或 owner 部分 則必須使用單引號 ( )
將整個 database owner table_name 括起來 如果只指定 table_name 則不需要單引號
index_name 是要重建的索引名 索引名必須符合標識符的規則 如果未指定 index_name 或指定為 就要對表的所有索引進行重建
fillfactor 是創建索引時每個索引頁上要用於存儲數據的空間百分比 fillfactor替換起始填充因子以作為索引或任何其它重建的非聚集索引(因為已重建聚集索引)的新默認值 如果 fillfactor 為 DBCC DBREINDEX 在創建索引時將使用指定的起始fillfactor
我們在查詢分析器中輸入如下的命令
DBCC DBREINDEX ( MyTable )
lishixin/Article/program/SQLServer/201311/22210
Ⅹ sql怎麼建立索引
什麼是索引
拿漢語字典的目錄頁(索引)打比方:正如漢語字典中的漢字按頁存放一樣,SQL Server中的數據記錄也是按頁存放的,每頁容量一般為4K 。為了加快查找的速度,漢語字(詞)典一般都有按拼音、筆畫、偏旁部首等排序的目錄(索引),我們可以選擇按拼音或筆畫查找方式,快速查找到需要的字(詞)。
同理,SQL Server允許用戶在表中創建索引,指定按某列預先排序,從而大大提高查詢速度。
• SQL Server中的數據也是按頁( 4KB )存放
• 索引:是SQL Server編排數據的內部方法。它為SQL Server提供一種方法來編排查詢數據。
• 索引頁:資料庫中存儲索引的數據頁;索引頁類似於漢語字(詞)典中按拼音或筆畫排序的目錄頁。
• 索引的作用:通過使用索引,可以大大提高資料庫的檢索速度,改善資料庫性能。
索引類型
• 唯一索引:唯一索引不允許兩行具有相同的索引值
• 主鍵索引:為表定義一個主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特殊類型。主鍵索引要求主鍵中的每個值是唯一的,並且不能為空
• 聚集索引(Clustered):表中各行的物理順序與鍵值的邏輯(索引)順序相同,每個表只能有一個
• 非聚集索引(Non-clustered):非聚集索引指定表的邏輯順序。數據存儲在一個位置,索引存儲在另一個位置,索引中包含指向數據存儲位置的指針。可以有多個,小於249個
索引類型:再次用漢語字典打比方,希望大家能夠明白聚集索引和非聚集索引這兩個概念。
唯一索引:
唯一索引不允許兩行具有相同的索引值。
如果現有數據中存在重復的鍵值,則大多數資料庫都不允許將新創建的唯一索引與表一起保存。當新數據將使表中的鍵值重復時,資料庫也拒絕接受此數據。例如,如果在stuInfo表中的學員員身份證號(stuID) 列上創建了唯一索引,則所有學員的身份證號不能重復。
提示:創建了唯一約束,將自動創建唯一索引。盡管唯一索引有助於找到信息,但為了獲得最佳性能,建議使用主鍵約束或唯一約束。
主鍵索引:
在資料庫關系圖中為表定義一個主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特殊類型。主鍵索引要求主鍵中的每個值是唯一的。當在查詢中使用主鍵索引時,它還允許快速訪問數據。
聚集索引(clustered index)
在聚集索引中,表中各行的物理順序與鍵值的邏輯(索引)順序相同。表只能包含一個聚集索引。例如:漢語字(詞)典默認按拼音排序編排字典中的每頁頁碼。拼音字母a,b,c,d……x,y,z就是索引的邏輯順序,而頁碼1,2,3……就是物理順序。默認按拼音排序的字典,其索引順序和邏輯順序是一致的。即拼音順序較後的字(詞)對應的頁碼也較大。如拼音「ha」對應的字(詞)頁碼就比拼音「ba」 對應的字(詞)頁碼靠後。
非聚集索引(Non-clustered)
如果不是聚集索引,表中各行的物理順序與鍵值的邏輯順序不匹配。聚集索引比非聚集索引(nonclustered index)有更快的數據訪問速度。例如,按筆畫排序的索引就是非聚集索引,「1」畫的字(詞)對應的頁碼可能比「3」畫的字(詞)對應的頁碼大(靠後)。
提示:SQL Server中,一個表只能創建1個聚集索引,多個非聚集索引。設置某列為主鍵,該列就默認為聚集索引
如何創建索引
使用T-SQL語句創建索引的語法:
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]
INDEX index_name
ON table_name (column_name…)
[WITH FILLFACTOR=x]
q UNIQUE表示唯一索引,可選
q CLUSTERED、NONCLUSTERED表示聚集索引還是非聚集索引,可選
q FILLFACTOR表示填充因子,指定一個0到100之間的值,該值指示索引頁填滿的空間所佔的百分比
在stuMarks表的writtenExam列創建索引:
USE stuDB
GO
IF EXISTS (SELECT name FROM sysindexes
WHERE name = 'IX_writtenExam')
DROP INDEX stuMarks.IX_writtenExam
/*--筆試列創建非聚集索引:填充因子為30%--*/
CREATE NONCLUSTERED INDEX IX_writtenExam
ON stuMarks(writtenExam)
WITH FILLFACTOR= 30
GO
/*-----指定按索引 IX_writtenExam 查詢----*/
SELECT * FROM stuMarks (INDEX=IX_writtenExam)
WHERE writtenExam BETWEEN 60 AND 90
雖然我們可以指定SQL Server按哪個索引進行數據查詢,但一般不需要我們人工指定。SQL Server將會根據我們創建的索引,自動優化查詢。
索引的優缺點
• 優點
– 加快訪問速度
– 加強行的唯一性
• 缺點
– 帶索引的表在資料庫中需要更多的存儲空間
– 操縱數據的命令需要更長的處理時間,因為它們需要對索引進行更新
創建索引的指導原則
• 請按照下列標准選擇建立索引的列。
– 該列用於頻繁搜索
– 該列用於對數據進行排序
• 請不要使用下面的列創建索引:
– 列中僅包含幾個不同的值。
– 表中僅包含幾行。為小型表創建索引可能不太劃算,因為SQL Server在索引中搜索數據所花的時間比在表中逐行搜索所花的時間更長