程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL數據庫查詢優化

MySQL數據庫查詢優化

編輯:關於MYSQL數據庫
當一個數據表裡有很多條(比如10000000)數據是,執行類似select * from table_name where `name`= 'testname' 這樣的查詢時,MySQL執行這條SQL語句的復雜度為10000000,MySQL執行SQL語句的復雜度可以用explain + SQL語句查看。此時就可以用到MySQL的索引來提高查詢速度,MySQL的索引實際上就是提前給數據做了分類,然後查詢的時候就根據它先前做的分類查詢,建立好索引之後,以上例子的復雜度就大大降低了,只有沒有重復的name字段,那麼它的復雜度就是1。這樣就大大的提高了訪問速度。 MySQL建立索引需要注意的問題:MySQL只對<, <=, >, >=,= BETWEEN, IN, 以及某些時候的LIKE(對於以通配符%和_開頭的查詢,MySQL不會使用索引)建立索引。索引的類型:
1、普通索引,它是最基本的索引,沒有任何限制。它的創建方式有以下幾種:
(1)創建索引:CREATE INDEX indexName ON tableName(tableColumns(length));如果是CHAR,VARCHAR類型,length可以小於字段實際長度;如果是BLOB 和 TEXT 類型,必須指定length。
(2)修改表結構:ALTER tableName ADD INDEX [indexName] ON (tableColumns(length))
(3)創建表的時候直接指定:CREATE TABLE tableName ( [...], INDEX [indexName] (tableColumns(length)) ;
2、唯一索引,它跟普通索引類似,唯一不一樣的是:它的值必須唯一,但允許空值。它的創建方式有以下幾種:
(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));
3、主鍵索引,它是特殊的唯一索引,不允許有空值。一般是在建表的時候創建:CREATE TABLE testIndex(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOT NULL,PRIMARY KEY(i_testID)); 當然也可以用ALTER命令。(常用)
4、全文索引:FULLTEXT 索引僅可用於 MyISAM 表。可以在 CREATE TABLE 時或之後使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上創建。對於大的數據庫,將數據裝載到一個沒有 FULLTEXT 索引的表中,然後再使用 ALTER TABLE (或 CREATE INDEX) 創建索引,這將是非常快的。將數據裝載到一個已經有 FULLTEXT 索引的表中,將是非常慢的。(原因是在insert或者update的時候會自動更新索引,一個解決方案是在操作之前把索引drop掉,然後操作成功後通過alter再加上索引)全文索引創建例子:
create table test(id int(10) unsigned auto_increment not null primary key,name varchar(20),content text,full text(name,content));
在接下來的檢索中會用到match()函數,函數match()對應一個要查找的字段(一個或者多個),而要搜索的字符串則作為against()函數的參數。並且它的搜索方式忽略大小寫。例子一 select * from test where match(name,content) against('teststring');
例子二 select id,match(name,content) against('teststring') from test;
兩者的區別在於索引結果是不是按照匹配深度排序。如果沒有where語句或者group by語句,返回的結果是不排序的。單列索引和組合索引:簡單的說組合索引就是在已經通過索引取得的結果集上再索引。
建立組合索引的例子:ALTER TABLE test ADD INDEX index_name (index1,index2,index3)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved