『壹』 如何創建mysql索引以及索引的優缺點
創建索引
CREATE INDEX indexName ON tablename(username(length));
為什麼有索引,查詢加快? 這是因為,創建索引可以大大提高系統的性能。
第一,通過創建唯一性索引,可以保證資料庫表中每一行數據的唯一性。
第二,可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
『貳』 資料庫索引優缺點
優點:資料庫系統是用來管理數據的,建立的數理邏輯和集合操作基礎上的。
具有高效、可靠、完整、自同步等特性,是業務系統進行數據控制的最佳選擇。
資料庫系統一般提供高效的數據控制和數據檢索功能,採用SQL語言來進行數據操作。
目前市面上流行的資料庫系統很多:較小型的資料庫系統有:mysql,MSSQL_SERVER等等,適用於企業級的大型資料庫有:ORACEL,DB2(IBM),INFORMIX(IBM)等等
缺點:安全性不夠,加了用戶級密碼容易破解
C/S 結構下對伺服器要求很高,否則容易造成 MDB 損壞並發數255。
但是對高強度操作適應性差,如果伺服器不夠好,網路不夠好,編程的方法不夠好,6-7個人同時訪問就能導致 MDB 損壞或者並死不能將 VBA 代碼開發的軟體系統直接編譯成 EXE 可執行文件。
不能脫離 ACCESS 或者 ACCESS RUNTIME 環境,該環境相對其他軟體體積較大(50M左右)
『叄』 如何創建mysql索引以及索引的優缺點
mysql教程:索引的使用以及索引的優缺點
1. 索引(index)是幫助MySQL高效獲取數據的數據結構。
它對於高性能非常關鍵,但人們通常會忘記或誤解它。
索引在數據越大的時候越重要。規模小、負載輕的資料庫即使沒有索引,也能有好的性能, 但是當數據增加的時候,性能就會下降很快。
Tip:蠕蟲復制,可以快速復制大量的數據
例:insert into emp select * from emp;
2. MySQL中常見的索引
◆普通索引 ◆唯一索引 ◆主鍵索引 ◆組合索引 ◆全文索引◆外鍵 (只有innodb存儲引擎才支持)
2.1普通索引:
這是最基本的索引,它沒有任何限制。有以下幾種創建方式:
有以下幾種創建方式:
◆創建索引
CREATE INDEX indexName ON tablename(username(length));
◆修改表結構
ALTER tablename ADD INDEX indexName (username(length))
Tip:length可以小於欄位實際長度;如果是BLOB 和 TEXT 類型,必須指定length ,下同
◆創建表的時候直接指定
CREATE TABLE mytableuuu( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX indexName (username(length)) );
CREATE TABLE mytable(id INT NOT NULL,username VARCHAR(16) NOT NULL);
create index index1 on mytable(id); //創建普通索引
◆刪掉索引:
drop index index1 on mytable;
有一個概念,
行定義:在聲明欄位(列)的時候定義的,比如primary key
表定義:在所有欄位(列)聲明完之後定義的,比如primary key,index
CREATE TABLE mytable(id INT NOT NULL,username VARCHAR(16) NOT NULL,index index1(username));
3.0唯一索引(unique)
索引列的值必須唯一,但允許有空值。
1)創建索引:Create UNIQUE INDEX indexName ON tableName(tableColumns(length))
2)修改表結構:Alter tableName ADD UNIQUE [indexName] ON (tableColumns(length)
3)創建表的時候直接指定:Create TABLE tableName ( [...], UNIQUE [indexName](tableColumns(length));
4.0主鍵索引(primary key)
『肆』 sql server 使用 索引 和 不使用 索引 的區別,能否舉例給我分析一下
使用索引 增加查詢速度 但是會消耗硬碟(索引有索引文件)
對索引列的修改刪除增加 會比 不增加索引需要更多的資源和時間
樓主可以按實際情況進行創建索引
以下是我自己找的資料 更多的還需要樓主自己找找
◆根據表數據大小創建索引
1.小表不需要建立索引
建立索引其性能也不會得到很大的改善,而且查詢時索引開銷,維護成本增加。
2. 大表建立索引
在大表建立索引的開銷要比普通的表大的多,是否要建索引需要考慮兩個方面
a.使用頻率,不常用的表不需要建立索引,例如系統日誌表,不需要用戶查看,系統管理員也不常看的表,就不需要建索引了。
b.查詢的數據量大小,一般查詢很小的數據量時就不要建索引了。
例如在1000萬數據表中查詢2條數據,建索引的開銷會很大。
◆根據列的特徵來創建索引
1.返回某范圍內的數據:頻繁查詢列
2.經常被分組排序列
3.外鍵列
一個表建多少索引合適?
1.索引主要用來進行查詢的表,設置的索引多一點,可以提高資料庫的查詢性能。同時因為記錄不怎麼更新,所以索引比較多的情況下,也不會影響到更新的速度。
2.經常更新記錄的表,如果在一張表中建立過多的索引,則會影響到更新的速度。由於更新操作比較頻繁,所以對其的負面影響,要比查詢效率提升要大的多。此時就需要限制索引的數量,只在一些必要的欄位上建立索引。
『伍』 資料庫索引有什麼作用和好處
資料庫索引是為了增加查詢速度而對表欄位附加的一種標識。見過很多人機械的理解索引的概念,認為增加索引只有好處沒有壞處。這里想把之前的索引學習筆記總結一下: 首先明白為什麼索引會增加速度,DB在執行一條Sql語句的時候,默認的方式是根據搜索條件進行全表掃描,遇到匹配條件的就加入搜索結果集合。如果我們對某一欄位增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度。那麼在任何時候都應該加索引么?這里有幾個反例:1、如果每次都需要取到所有表記錄,無論如何都必須進行全表掃描了,那麼是否加索引也沒有意義了。2、對非唯一的欄位,例如「性別」這種大量重復值的欄位,增加索引也沒有什麼意義。3、對於記錄比較少的表,增加索引不會帶來速度的優化反而浪費了存儲空間,因為索引是需要存儲空間的,而且有個致命缺點是對於update/insert/delete的每次執行,欄位的索引都必須重新計算更新。 那麼在什麼時候適合加上索引呢?我們看一個Mysql手冊中舉的例子,這里有一條sql語句: SELECT c.companyID, c.companyName FROM Companies c, User u WHERE c.companyID = u.fk_companyID AND c.numEmployees >= 0 AND c.companyName LIKE '%i%' AND u.groupID IN (SELECT g.groupID FROM Groups g WHERE g.groupLabel = 'Executive') 這條語句涉及3個表的聯接,並且包括了許多搜索條件比如大小比較,Like匹配等。在沒有索引的情況下Mysql需要執行的掃描行數是77721876行。而我們通過在companyID和groupLabel兩個欄位上加上索引之後,掃描的行數只需要134行。在Mysql中可以通過Explain Select來查看掃描次數。可以看出來在這種聯表和復雜搜索條件的情況下,索引帶來的性能提升遠比它所佔據的磁碟空間要重要得多。 那麼索引是如何實現的呢?大多數DB廠商實現索引都是基於一種數據結構——B樹。因為B樹的特點就是適合在磁碟等直接存儲設備上組織動態查找表。B樹的定義是這樣的:一棵m(m>=3)階的B樹是滿足下列條件的m叉樹: 1、每個結點包括如下作用域(j, p0, k1, p1, k2, p2, ... ki, pi) 其中j是關鍵字個數,p是孩子指針 2、所有葉子結點在同一層上,層數等於樹高h 3、每個非根結點包含的關鍵字個數滿足[m/2-1]<=j<=m-1 4、若樹非空,則根至少有1個關鍵字,若根非葉子,則至少有2棵子樹,至多有m棵子樹 看一個B樹的例子,針對26個英文字母的B樹可以這樣構造: 可以看到在這棵B樹搜索英文字母復雜度只為o(m),在數據量比較大的情況下,這樣的結構可以大大增加查詢速度。然而有另外一種數據結構查詢的虛度比B樹更快——散列表。Hash表的定義是這樣的:設所有可能出現的關鍵字集合為u,實際發生存儲的關鍵字記為k,而|k|比|u|小很多。散列方法是通過散列函數h將u映射到表T[0,m-1]的下標上,這樣u中的關鍵字為變數,以h為函數運算結果即為相應結點的存儲地址。從而達到可以在o(1)的時間內完成查找。
然而散列表有一個缺陷,那就是散列沖突,即兩個關鍵字通過散列函數計算出了相同的結果。設m和n分別表示散列表的長度和填滿的結點數,n/m為散列表的填裝因子,因子越大,表示散列沖突的機會越大。
因為有這樣的缺陷,所以資料庫不會使用散列表來做為索引的默認實現,Mysql宣稱會根據執行查詢格式嘗試將基於磁碟的B樹索引轉變為和合適的散列索引以追求進一步提高搜索速度。我想其它資料庫廠商也會有類似的策略,畢竟在資料庫戰場上,搜索速度和管理安全一樣是非常重要的競爭點。
『陸』 建立資料庫索引的優缺點,分析一張表上如何建立索引
1、表的主鍵、外鍵必須有索引;
2、數據量超過300的表應該有索引;
3、經常與其他表進行連接的表,在連接欄位上應該建立索引;
4、經常出現在Where子句中的欄位,特別是大表的欄位,應該建立索引;
5、索引應該建在選擇性高的欄位上;
6、索引應該建在小欄位上,對於大的文本欄位甚至超長欄位,不要建索引;
7、復合索引的建立需要進行仔細分析;盡量考慮用單欄位索引代替:
A、正確選擇復合索引中的主列欄位,一般是選擇性較好的欄位;
B、復合索引的幾個欄位是否經常同時以AND方式出現在Where子句中?單欄位查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單欄位索引;
C、如果復合索引中包含的欄位經常單獨出現在Where子句中,則分解為多個單欄位索引;
D、如果復合索引所包含的欄位超過3個,那麼仔細考慮其必要性,考慮減少復合的欄位;
E、如果既有單欄位索引,又有這幾個欄位上的復合索引,一般可以刪除復合索引;
8、頻繁進行數據操作的表,不要建立太多的索引;
9、刪除無用的索引,避免對執行計劃造成負面影響;
以上是一些普遍的建立索引時的判斷依據。一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。因為太多的索引與不充分、不正確的索引對性能都毫無益處:在表上建立的每個索引都會增加存儲開銷,索引對於插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復合索引,在有單欄位索引的情況下,一般都是沒有存在價值的;相反,還會降低數據增加刪除時的性能,特別是對頻繁更新的表來說,負面影響更大。
只做參考,整理自網路。
『柒』 如何創建mysql索引以及索引的優缺點
mysql教程:索引的使用以及索引的優缺點
1. 索引(index)是幫助MySQL高效獲取數據的數據結構。
它對於高性能非常關鍵,但人們通常會忘記或誤解它。
索引在數據越大的時候越重要。規模小、負載輕的資料庫即使沒有索引,也能有好的性能, 但是當數據增加的時候,性能就會下降很快。
Tip:蠕蟲復制,可以快速復制大量的數據
例:insert into emp select * from emp;
2. MySQL中常見的索引
◆普通索引 ◆唯一索引 ◆主鍵索引 ◆組合索引 ◆全文索引◆外鍵 (只有innodb存儲引擎才支持)
2.1普通索引:
這是最基本的索引,它沒有任何限制。有以下幾種創建方式:
有以下幾種創建方式:
◆創建索引
CREATE INDEX indexName ON tablename(username(length));
◆修改表結構
ALTER tablename ADD INDEX indexName (username(length))
Tip:length可以小於欄位實際長度;如果是BLOB 和 TEXT 類型,必須指定length ,下同
◆創建表的時候直接指定
CREATE TABLE mytableuuu( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX indexName (username(length)) );
CREATE TABLE mytable(id INT NOT NULL,username VARCHAR(16) NOT NULL);
create index index1 on mytable(id); //創建普通索引
◆刪掉索引:
drop index index1 on mytable;
有一個概念,
行定義:在聲明欄位(列)的時候定義的,比如primary key
表定義:在所有欄位(列)聲明完之後定義的,比如primary key,index
CREATE TABLE mytable(id INT NOT NULL,username VARCHAR(16) NOT NULL,index index1(username));
3.0唯一索引(unique)
索引列的值必須唯一,但允許有空值。
1)創建索引:Create UNIQUE INDEX indexName ON tableName(tableColumns(length))
2)修改表結構:Alter tableName ADD UNIQUE [indexName] ON (tableColumns(length)
3)創建表的時候直接指定:Create TABLE tableName ( [...], UNIQUE [indexName](tableColumns(length));
4.0主鍵索引(primary key)
『捌』 SQL Server的兩種索引是何形式索引的作用索引的優缺點
索引的作用就象書的目錄,給出條件查找目錄找出所需要的內容
主鍵索引和聚合索引
我們來看:(gid是主鍵,fariqi是聚合索引列):
select top 10000 gid,fariqi,reader,title from tgongwen
用時:196 毫秒。 掃描計數 1,邏輯讀 289 次,物理讀 1 次,預讀 1527 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by gid asc
用時:4720毫秒。 掃描計數 1,邏輯讀 41956 次,物理讀 0 次,預讀 1287 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc
用時:4736毫秒。 掃描計數 1,邏輯讀 55350 次,物理讀 10 次,預讀 775 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi asc
用時:173毫秒。 掃描計數 1,邏輯讀 290 次,物理讀 0 次,預讀 0 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi desc
用時:156毫秒。 掃描計數 1,邏輯讀 289 次,物理讀 0 次,預讀 0 次。
從以上我們可以看出,不排序的速度以及邏輯讀次數都是和「order by 聚集索引列」 的速度是相當的,但這些都比「order by 非聚集索引列」的查詢速度是快得多的。
同時,按照某個欄位進行排序的時候,無論是正序還是倒序,速度是基本相當的。
『玖』 資料庫創建表方法的優缺點有哪些
優點:
第一,通過創建唯一性索引,可以保證資料庫表中每一行數據的唯一性。
第二,可以大大加快 數據的檢索速度,這也是創建索引的最主要的原因。
第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
第四,在使用分組和排序 子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
缺點:
第一,創建索引和維護索引要耗費時間,這種時間隨著數據 量的增加而增加。
第二,索引需要佔物理空間,除了數據表占數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。
第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。