《Mysql實例mysql索引與優化》要點:
本文介紹了Mysql實例mysql索引與優化,希望對您有用。如果有疑問,可以聯系我們。
更通俗的說,數據庫索引就好比一本書的目錄,能夠加快數據庫的查詢速度MYSQL應用
這是這基本的索引,它沒有任何限制,MyISAM 中默認的 B-tree 類型的索引MYSQL應用
# 直接創建索引
CREATE INDEX index_name ON table(column(length))
# 修改表結構的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
# 創建表的時候同時創建索引
CREATE TABLE table_name ( \*,INDEX index_name title(length))
# 刪除索引
DROP INDEX index_name ON table
與普通索引一致,不同的是索引值必須唯一,允許有空值MYSQL應用
# 直接創建索引
CREATE UNIQUE INDEX index_name ON table(column(length))
# 修改表結構的方式添加索引
ALTER TABLE table_name ADD UNIQUE INDEX index_name ON (column(length))
# 創建表的時候同時創建索引
CREATE TABLE table_name ( \*,UNIQUE index_name title(length))
FULLTEXT 索引僅 MyISAM 引擎支持
他們可以從CHAR、VARCHAR或TEXT列中作為CREATE TABLE語句的一部分被創建,或是隨后使用ALTER TABLE 或CREATE INDEX被添加
不過切記對于大容量的數據表,生成全文索引是一個非常消耗時間非常消耗硬盤空間的做法MYSQL應用
# 直接創建索引
CREATE FULLTEXT INDEX index_content ON article(content)
# 修改表結構的方式添加索引
ALTER TABLE article ADD FULLTEXT index_content(content)
# 創建表的時候同時創建索引
CREATE TABLE table_name ( \*,FULLTEXT (content))
平時用的SQL查詢語句一般都有比較多的限制條件,所以為了進一步榨取MySQL的效率,就要考慮建立組合索引.
ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))
建立這樣的組合索引,其實是相當于分別建立了下面兩組組合索引:
–title,time
–titleMYSQL應用
應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num is nullMYSQL應用
可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢:
select id from t where num=0MYSQL應用
應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描.優化器將無法通過索引來確定將要命中的行數,因此需要搜索該表的所有行.MYSQL應用
應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num=10 or num=20MYSQL應用
可以這樣查詢:
select id from t where num=10
union all
select id from t where num=20MYSQL應用
in 和 not in 也要慎用,因為IN會使系統無法使用索引,而只能直接搜索表中的數據.如:
select id from t where num in(1,2,3)MYSQL應用
對于連續的數值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3MYSQL應用
盡量避免在索引過的字符數據中,使用非打頭字母搜索.這也使得引擎無法利用索引.
見如下例子:
SELECT * FROM T1 WHERE NAME LIKE ‘%L%’
SELECT * FROM T1 WHERE SUBSTING(NAME,2,1)=’L’
SELECT * FROM T1 WHERE NAME LIKE ‘L%’MYSQL應用
即使NAME字段建有索引,前兩個查詢依然無法利用索引完成加快操作,引擎不得不對全表所有數據逐條操作來完成任務.而第三個查詢能夠使用索引來加快操作MYSQL應用
應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描MYSQL應用
應盡量避免在where子句中對字段進行函數操作,這將導致引擎放棄使用索引而進行全表掃描MYSQL應用
不要在 where 子句中的“=”左邊進行函數、算術運算或其他表達式運算,否則系統將可能無法正確使用索引MYSQL應用
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/6162.html