1、索引的儲存分類
myisam儲存引擎的表資料和索引是自動分開儲存的,各自是獨一的乙個檔案
innodb儲存引擎的表資料和索引是儲存在同乙個表空間裡面,但可以由多個檔案構成。
mysql 目前不支援函式索引,但是能對列的前面某一部分進行索引
例如name欄位,可以只取name的前4個字元進行索引,可降低索引檔案大小。
mysql> create index ind_company_name on company(name(4));
說明:ind_company_name索引名,company表名
2、使用like的查詢,後面如果是常量,並且%號不在第乙個字元,索引才可能被用上
eg: mysql> select * from t1 where id like "3%"; 推薦
mysql> select * from t1 where id like "3%"; 不推薦 (索引用不上)
3、如果對大的文字進行索引,使用全文索引而不使用like"%....%"
4、如果列名是索引,使用column_name is null 將使用索引。
eg: mysql> desc select * from company where name is null\g
5、存在索引但不使用索引
6、如果mysql估計使用索引比全表掃瞄更慢,則不使用索引。
例如:如果列key_part均勻的分布在1-100之間,查詢時使用索引就不好。
eg:mysql> select * from table_name where key_part>1 and key_part<90;
7、如果使用memory/heap 表並且where條件中不適用「=」進行索引列,那麼不會用到索引。heap表只有在「=」的條件下會使用索引。
8、用or分割開的條件,如果or前的條件中的列有索引,而後面的列沒有索引,那麼涉及的索引都不會被使用。
9、如果不是索引列的第一部分,那麼查詢中這個索引也不會被mysql採用。
eg: mysql> desc select * from sales where moneys=1\g
moneys上面建有復合索引,但是moneys不是索引的第一列。
10、如果列型別是字串,但是查詢時把乙個數值型常量複製給了乙個字元型的列名name,那麼雖然name列有索引,也不會使用。
eg: mysql> desc select * from company where name=123\g (字串索引使用整形資料查詢,不會使用索引)
mysql> desc select * from company where name="123"\g (使用上索引)
檢視mysql索引使用情況
mysql> show status like 'handle_read%';
如果索引正在工作,handler_read_key的值將很高,這個值代表索引被使用次數。
handler_read_rnd_next的值高意味著查詢執行低效,並且應該建立索引補救。
2個簡單實用的優化技巧
a、定期分析表和檢查表
mysql> analyze [local | no_write_to_binlog] table tab_name [,tab_name1]...;
本語句用於分析和儲存表的關鍵字分布,分析結果可以使系統得到準確的統計資訊。使sql能夠生成正確的行計畫。
eg: mysql> analyze table sales;
分析表的語法如下: (檢查乙個或多個表是否有錯誤)
mysql> check table tab_name [,tab1_name]...[option]...option=
eg: mysql> check table sales;
b、定期優化表
優化表的語法格式:
mysql> optimize [local | no_write_to_binlog] tab_name [,tab_name1]..
如果已經刪除了表的一大部分,或者已經對含有可變長度行的表進行了很多的改動,則需要定期優化。
這個命令可以將表中的空間碎片進行合併,但是只對myisam、bdb和innodb表起作用。
eg: mysql> optimize table sales; (不要在mysql訪問數大的情況下使用)
常用sql的優化
大批量插入資料
當用load命令匯入資料的時候,適當設定可以提高匯入速度
對於myiasm儲存引擎的表,可以用個一下方式快速匯入大量資料
alter table tab_name disable keys loading the data
alter table tab_name enable keys
disable keys 和 enable keys 用來開啟或關閉myisam表非唯一索引的更新,可以提高速度,對innodb無效。
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 ...
mysql索引優化原則 MySQL索引優化
mysql官方對索引的定義 索引是幫助mysql高效獲取資料的資料結構。索引是在儲存引擎中實現的,所以每種儲存引擎中的索引都不一樣。如myisam和innodb儲存引擎只支援btree索引 memory和heap儲存引擎可以支援hash和btree索引。這裡僅針對常用的innodb儲存引擎所支援的b...