mysql的資料索引我們開發的時候一定都會用到,比如我們的主鍵、唯一等這些都是有到索引的内容,但是如果隻有這樣的索引在我們的實際開發中肯定滿足不了我們的需求,這個時候就需要我們來建立相關的索引,但是索引建立并不是胡亂的建立,以下給出大家一些建議
索引:提高資料查詢的速度,一般建立索引的列為很少改動的列。
1、例句: select * from user where userId = '123456789';
userId很少改變且是唯一值,可以對userID建立索引;
2、例句:select * from user where name = '李明' and age = 26;
如果name和age是不能為null的列,那麼我們可以對這兩列單獨建立索引,但是如果經常使用這兩列進行查詢,就要建立複合索引(name, age);
3、例句:select * from user where name = '李明' and age = 26 and height = 175;
此時我們既想滿足上面的條件又想滿足下面的查詢語句的條件的索引,可以會建立兩個索引(name,age)和(name,age,height),但是通常可以建立複合索引(name,age,height)即可,因為複合索引滿足最佳左字首原則,會建立以下三個索引(name,age,height)、(name,age)、(name);
4、例句:select * from user where number like '2017%';
學号是按年月日+四位數字,此時想查學号的年份是2017的學生,為了提高查詢速度,如果對number建立索引使用,模糊查詢(%123%)索引會失效,此時可以使用短索引,也就是隻對number的字首,前四位建立索引即可。
5、select * from user where grade = '二年級' order by number;
查詢二年級的學生并對其進行排序,此時如果對grade和number分别建立了索引,采用上面的方式進行查詢時,索引是沒有效果的,因為where子句中已經有了索引,此時order by中的索引不會生效,導緻整個sql語句的索引都不會生效。
6、select * from user where year(time) < 2017 and grade not in ('二年級','三年級');
此時無論是建立在time還是grade的索引都會失效,索引的列是不能進行計算的,采用計算該列的索引就會失效,使用not in 語句也會失效,不過可以使用not exists代替。
通常索引的列可以進行<,>,=,<=,>=,between,in操作。
如果sql語句中包含or,<>,like '%123',所在列不能null,盡量不要在重複值過多的列建立索引
7、in和not in在主鍵上的唯一索引是可以使用的,但是在其他不是唯一索引列索引是失效的。
以上就是一些簡單索引建立的選擇,但是越複雜的索引建立肯定不是這樣簡單的,後面會給大家繼續更新
有需要交流的小夥伴可以點選這裡加本人QQ:luke
最好的貴人
就是拼命努力的自己。