以下面的表為例,表叫article。
建立索引語句:create index idx_ccv on article(category_id,comments,views);
查詢語句:explain select id,author_id from `article` where category_id=1 and comments>1 order by views desc limit 1;
explain的結果如下:
extra列出現了using filesort,全表掃瞄,說明索引跟沒有上一樣,並沒有加快速度。原因是這樣的,根據索引的建立順序,我們先建立的是category_id,索引先按照有序的category_id查詢,之後遇到了comments>1的range查詢,在按照有序的comments查詢的時候,無法再保證views是有序的,所以索引沒發繼續用,只能全表掃瞄。
兩個表結構class和book。
連線查詢語句:select * from book left join class on book.card=class.card;
首先乙個問題就是,這個索引在calss表還是book表?
直接給出結論:左連線索引建在left join右面的表,右連線索引在right join左面的表
以左連線為例:
建立索引:create index idx on class(card);
左連線查詢:explain select * from book left join class on book.card=class.card;
explain結果:
對於左連線,左表必須全部查詢,所以做表建索引沒有意義,給右表建就可以了,右連線同理。
在兩個表的基礎上又建立了乙個phone表。
查詢語句:select * from class left join book on class.card=book.card left join phone on book.card=phone.card;
根據兩個表的經驗,可以推出應在leftjoin右邊建索引,也就是book和phone上面對card列建立索引。
用小的結果集驅動大的結果集。left join左邊集合最好是小的。
優先優化內層迴圈。
join的被驅動表要加上索引。
MySql 建立索引方法
建立原理可參考,這裡僅給出了mysql建立索引的方法。1.建立示例檔案 建立 create table students std id int 11 not null,std name varchar 50 not null,std email varchar 50 not null,std pho...
(索引)建立MySQL索引
建立索引的必要性 主鍵預設是建立索引的,而且具有唯一性 合適地建立索引後比不建立索引,提高了查詢速度 建立索引的語法 簡單索引 可以有重複資料 create index indexname on tablename column name 1舉例子說明如 建立乙個資料表,設定一些初始的資料,然後採用...
c mysql建立索引 MySQL 建立索引
1 索引建立原則 1 搜尋的索引列,不一定是所要選擇的列。換句話說,最適合索引的列是出現在where子句中的列,或連線子句中指定的列,而不是出現在select關鍵字後的選擇列表中的列。2 使用唯一索引。考慮某列中值的分布。索引的列的基數越大,索引的效果越好。3 使用短索引。如果對字串列進行索引,應該...