myisam表的資料檔案和索引檔案是自動分開的;innodb的資料和索引是儲存在同乙個表空間裡面,但可以有多個檔案組成。 建立索引語法如下:
create [unique|fulltext|spatial] index index_name
[using index_type]
on tbl_name (index_col_name,...)
index_col_name:
col_name [(length)] [asc | desc]
索引的儲存型別目前只有兩種(btree和hash),具體和表的模式相關:
myisam btree
innodb btree
memory/heap hash,btree
mysql目前不支援函式索引,只能對列的前一部分(length)進行索引,例:
create index ind_test on table1(name(5)),
對於char和varchar列,使用字首索引將大大節省空間。
索引用於快速找出在某個列中有一特定值的行。對相關列使用索引是提高select操作效能的最佳途徑。
查詢要使用索引最主要的條件是查詢條件中需要使用索引關鍵字,如果是多列索引,那麼只有查詢條件使用了多列關鍵字最左邊的字首時,才可以使用索引,否則將不能使用索引。
下列情況下,mysql不會使用已有的索引:
1.如果mysql估計使用索引比全表掃瞄更慢,則不使用索引。例如:如果key_part1均勻分布在1和100之間,下列查詢中使用索引就不是很好:
select * from table_name where key_part1 > 1 and key_part1 < 90
2.如果使用heap表並且where條件中不用=索引列,其他》 、<、 >=、 <=均不使用索引;
3.如果不是索引列的第一部分;
4.如果like是以%開始;
5.對where後邊條件為字串的一定要加引號,字串如果為數字mysql會自動轉為字串,但是不使用索引。
如果索引正在工作,handler_read_key的值將很高,這個值代表了乙個行被索引值讀的次數,很低的值表明增加索引得到的效能改善不高,因為索引並不經常使用。
handler_read_rnd_next的值高則意味著查詢執行低效,並且應該建立索引補救。這個值的含義是在資料檔案中讀下一行的請求數。如果你正進行大量的表掃瞄,該值較高。通常說明表索引不正確或寫入的查詢沒有利用索引。語法:
mysql> show status like 'handler_read%';
Mysql索引優化教程
b 索引的儲存分類 b myisam表的資料檔案和索引檔案是自動分開的 innodb的資料和索引是儲存在同乙個表空間裡面,但可以有多個檔案組成。建立索引語法如下 create unique fulltext spatial index index name using index type on t...
mysql 優化 聚集索引 mysql 索引優化
一.聚集索引 clustered index innodb預設依據主鍵列聚集,myisam不使用 特點 b樹每個葉子包含實際資料行,資料按照索引順序地儲存在物理頁上。優點 1.範圍查詢,獲取指定id的全部資料只需從磁碟讀取少量資料頁 如果不使用聚集索引,每條資料可能引起一次磁碟io。2.由於索引和資...
mysql索引優化原則 MySQL 索引優化原則
索引優化原則 1 最左字首匹配原則,聯合索引,mysql會從做向右匹配直到遇到範圍查詢 3 and d 4 如果建立 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引則都可以用到,a,b,d的順序可以任意調整。2 和in可以亂序,比如a 1 and b 2 and c ...