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

索引sql調整

發布時間: 2022-07-11 07:59:05

1. 如何優化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

2. 在SQL資料庫中設置索引的原則是什麼(注意是設置不是創建)

其實索引的好壞還和你的查詢語句有關系,就是where後邊的列有關.如果兩者協調不好的話,同樣應用索引也得不到什麼好處.下邊的文章希望對你有益:

索引的設計

A:盡量避免表掃描檢查你的查詢語句的where子句,因為這是優化器重要關注的地方。包含在where裡面的每一列(column)都是可能的侯選索引,為能達到最優的性能,考慮在下面給出的例子:對於在where子句中給出了column1這個列。下面的兩個條件可以提高索引的優化查詢性能!第一:在表中的column1列上有一個單索引第二:在表中有多索引,但是column1是第一個索引的列避免定義多索引而column1是第二個或後面的索引,這樣的索引不能優化伺服器性能例如:下面的例子用了pubs資料庫。

SELECT au_id, au_lname, au_fname FROM authors

WHERE au_lname = 'White'按下面幾個列上建立的索引將會是對優化器有用的索引

au_lname

au_lname, au_fname而在下面幾個列上建立的索引將不會對優化器起到好的作用

au_address

au_fname, au_lname考慮使用窄的索引在一個或兩個列上,窄索引比多索引和復合索引更能有效。用窄的索引,在每一頁上將會有更多的行和更少的索引級別(相對與多索引和復合索引而言),這將推進系統性能。對於多列索引,SQL Server維持一個在所有列的索引上的密度統計(用於聯合)和在第一個索引上的
histogram(柱狀圖)統計。根據統計結果,如果在復合索引上的第一個索引很少被選擇使用,那麼優化器對很多查詢請求將不會使用索引。有用的索引會提高select語句的性能,包括insert,uodate,delete。但是,由於改變一個表的內容,將會影響索引。每一個insert,update,delete語句將會使性能下降一些。實驗表明,不要在一個單表上用大量的索引,不要在共享的列上(指在多表中用了參考約束)使用重疊的索引。在某一列上檢查唯一的數據的個數,比較它與表中數據的行數做一個比較。這就是數據的選擇性,這比較結果將會幫助你決定是否將某一列作為侯選的索引列,如果需要,建哪一種索引。你可以用下面的查詢語句返回某一列的不同值的數目。

select count(distinct cloumn_name) from table_name假設column_name是一個10000行的表,則看column_name返回值來決定是否應該使用,及應該使用什麼索引。

Unique values Index
5000 Nonclustered index
20 Clustered index
3 No index

鏃索引和非鏃索引的選擇

<1:>鏃索引是行的物理順序和索引的順序是一致的。頁級,低層等索引的各個級別上都包含實際的數據頁。一個表只能是有一個鏃索引。由於update,delete語句要求相對多一些的讀操作,因此鏃索引常常能加速這樣的操作。在至少有一個索引的表中,你應該有一個鏃索引。在下面的幾個情況下,你可以考慮用鏃索引:例如:某列包括的不同值的個數是有限的(但是不是極少的)顧客表的州名列有50個左右的不同州名的縮寫值,可以使用鏃索引。例如:對返回一定范圍內值的列可以使用鏃索引,比如用between,>,>=,<,<=等等來對列進行操作的列上。

select * from sales where ord_date between Ƌ/1/93' and ƌ/1/93'例如:對查詢時返回大量結果的列可以使用鏃索引。

SELECT * FROM phonebook WHERE last_name = 'Smith'

當有大量的行正在被插入表中時,要避免在本表一個自然增長(例如,identity列)的列上建立鏃索引。如果你建立了鏃的索引,那麼insert的性能就會大大降低。因為每一個插入的行必須到表的最後,表的最後一個數據頁。當一個數據正在被插入(這時這個數據頁是被鎖定的),所有的其他插入行必須等待直到當前的插入已經結束。一個索引的葉級頁中包括實際的數據頁,並且在硬碟上的數據頁的次序是跟鏃索引的邏輯次序一樣的。

<2:>一個非鏃的索引就是行的物理次序與索引的次序是不同的。一個非鏃索引的葉級包含了指向行數據頁的指針。在一個表中可以有多個非鏃索引,你可以在以下幾個情況下考慮使用非鏃索引。在有很多不同值的列上可以考慮使用非鏃索引例如:一個part_id列在一個part表中select * from employee where emp_id = 'pcm9809f'查詢語句中用order by子句的列上可以考慮使用鏃索引

三、查詢語句的設計

SQL Server優化器通過分析查詢語句,自動對查詢進行優化並決定最有效的執行方案。優化器分析查詢語句來決定那個子句可以被優化,並針對可以被優化查詢的子句來選擇有用的索引。最後優化器比較所有可能的執行方案並選擇最有效的一個方案出來。在執行一個查詢時,用一個where子句來限制必須處理的行數,除非完全需要,否則應該避免在一個表中無限制地讀並處理所有的行。例如下面的例子,select qty from sales where stor_id=7131是很有效的比下面這個無限制的查詢select qty from sales避免給客戶的最後數據選擇返回大量的結果集。允許SQL Server運行滿足它目的的函數限制結果集的大小是更有效的。這能減少網路I/O並能提高多用戶的相關並發時的應用程序性能。因為優化器關注的焦點就是where子句的查詢,以利用有用的索引。在表中的每一個索引都可能成為包括在where子句中的侯選索引。為了最好的性能可以遵照下面的用於一個給定列column1的索引。第一:在表中的column1列上有一個單索引第二:在表中有多索引,但是column1是第一個索引的列不要在where子句中使用沒有column1列索引的查詢語句,並避免在where子句用一個多索引的非第一個索引的索引。這時多索引是沒有用的。

For example, given a multicolumn index on the au_lname, au_fname columns of the authors table in
the pubs database,下面這個query語句利用了au_lname上的索引
SELECT au_id, au_lname, au_fname FROM authors
WHERE au_lname = 'White'
AND au_fname = 'Johnson'
SELECT au_id, au_lname, au_fname FROM authors
WHERE au_lname = 'White'下面這個查詢沒有利用索引,因為他使用了多索引的非第一個索引的索引
SELECT au_id, au_lname, au_fname FROM authors
WHERE au_fname = 'Johnson'

3. 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` )

4. 怎麼用sql語句修改索引所在的文件組

修改文件組的名稱
alter database database_name
modify filegroup old_filegroup_name
name=new_filegroup_name

創建一個文件指定一個文件組
假如原來就存在一個文件組filegroup_1
那麼就這么寫
alter database database_name
add file
(
name='file_name',
filename='d:\file_name.ndf',
size=...,
maxsize=...,
filegrowth=...
)
to filegroup filegroup_1

假如不存在文件組filegroup_1
可以先創建一個,如下
alter database database_name
add filegroup filegroup_1
之後重復上面的alter database...語句即可。

5. sql 怎麼 更新索引

可以創建索引、修改索引和優化索引,沒聽說過更新索引
如果確實有,請告知。謝謝。

6. 如何在 SQL 資料庫優化 索引,SQL索引優化

1、主鍵就是聚集索引
2、只要建立索引就能顯著提高查詢速度
3、把所有需要提高查詢速度的欄位都加進聚集索引,以提高查詢速度

(四)其他書上沒有的索引使用經驗總結
1、用聚合索引比用不是聚合索引的主鍵速度快
2、用聚合索引比用一般的主鍵作order by時速度快,特別是在小數據量情況下
3、使用聚合索引內的時間段,搜索時間會按數據占整個數據表的百分比成比例減少,而無論聚合索引使用了多少個
4 、日期列不會因為有分秒的輸入而減慢查詢速度

(五)其他注意事項
1. 不要索引常用的小型表
2. 不要把社會保障號碼(SSN)或身份證號碼(ID)選作鍵
3. 不要用用戶的鍵
4. 不要索引 memo/notes 欄位和不要索引大型文本欄位(許多字元)
5. 使用系統生成的主鍵

二、改善SQL語句
1、Like語句是否屬於SARG取決於所使用的通配符的類型
2、or 會引起全表掃描
3、非操作符、函數引起的不滿足SARG形式的語句
4、IN 的作用相當與OR
5、盡量少用NOT
6、exists 和 in 的執行效率是一樣的
7、用函數charindex()和前面加通配符%的LIKE執行效率一樣
8、union並不絕對比or的執行效率高
9、欄位提取要按照「需多少、提多少」的原則,避免「select *」
10、count(*)不比count(欄位)慢
11、order by按聚集索引列排序效率最高
12、高效的TOP

7. sql調優的幾種方式

你好,
SQL優化的一些方法
1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
2.應盡量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描。
3.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。
4.應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描。
5.in 和 not in 也要慎用,否則會導致全表掃描,
6.下面的查詢也將導致全表掃描:
select id from t where name like '%abc%'
7.應盡量避免在 where 子句中對欄位進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。
8.應盡量避免在where子句中對欄位進行函數操作,這將導致引擎放棄使用索引而進行全表掃描。
9.不要在 where 子句中的「=」左邊進行函數、算術運算或其他表達式運算,否則系統將可能無法正確使用索引。
10.在使用索引欄位作為條件時,如果該索引是復合索引,那麼必須使用到該索引中的第一個欄位作為條件時才能保證系統使用該索引,否則該索引將不會被使用,並且應盡可能的讓欄位順序與索引順序相一致。

8. SQL 修改 索引

select num from table num <=2
union all
select num from table num = 6
union all
select num from table num >=3 and num <> 6

要不就根據需要寫個存儲過程,沒有直接的方法

9. sql問題,索引的修改。alter index語句如何使用,謝謝

alter index常用的語法如下:
(1)重建指定索引:
ALTER INDEX ind ON TA
REBUILD;
(2)重建全部索引:
ALTER INDEX ALL ON TA
REBUILD;
(3)禁用索引:
ALTER INDEX ALL ON TA
DISABLE;
(再次啟用使用REBUILD重建而不是ENABLED)
(4)指定參數重建索引:
ALTER INDEX ALL ON TA
REBUILD WITH(FILLFACTOR=80);
(5)指定參數修改索引:
ALTER INDEX ALL ON TA
SET(IGNORE_DUP_KEY = ON);

注意:alter index語法,不能用於修改索引定義,如添加或刪除列,或更改列的順序

10. sql語句中怎麼修改 索引

我覺得應該不能修改索引吧。。創建索引的目的是為了提高查詢效率,是對於某個具體屬性而建立的,如果用戶覺得這個索引不適合,或者說這個索引創建的不好,那麼可以刪除索引,重新再創建一個索引。某個屬性創建索引不適合,可以把該索引刪掉,再在另外的屬性上創建一個索引,因此應該就沒有必要再設計一個可以創建索引的方法或語句。刪除後再創建一個索引可以達到這樣的效果。

要不你把題目仔細說一下。。有試過搭配用desc來達到降序的目的嗎