場景:有用戶表user,有id,email,user_name,mobile等字段,如今要求根據指定email賬號查詢一個用戶。mysql
乍一看,這個需求簡單,不用考慮直接寫出了一下sqlsql
select * from user where email='xxx@yyy.com';
這時,就有可能踩雷了。ide
這種狀況下,就悲劇了。因爲沒有索引,即便email的記錄不重複,也會全表掃描。code
2.email列有普通索引
這種狀況下能避免全表掃描,能用到索引,可是還會繼續使用到where條件進行過濾。索引
在僅查詢一條記錄的時候,不管where條件是否有索引有什麼樣的索引,最好在條件後面加limit 1限制一下。這樣就能避免全表掃描,儘量提升查詢的效率。養成這樣的意識習慣,就不會踩坑。it
select * from user where email='xxx@yyy.com' limit 1;
原理:當mysql查詢時,若是有limit 1限制,查詢到知足條件的第一條記錄的就返回結果,不會繼續查詢下去。class
假如email列沒有索引,且恰好記錄在數據表的最後一條,這樣limit 1實際上也會全表掃描,這種狀況下就最好考慮給email列加索引。效率