##避免全表扫描
*见分享2015.08.25_数据库那些事 一*
####**使用EXPLAIN命令,查看sql中是否有全表扫描**
``` sql
EXPLAIN SELECT
*
FROM
`user`
LEFT JOIN company_info com ON `user`.company_info_id = com.id where `user`.id = 3
```
结果:
![](https://box.kancloud.cn/2016-05-17_573a8928a9258.jpg)
主要字段解释:
>type
>>const 最多会有一条记录匹配
ref 非唯一性索引扫描,返回匹配某个单独值的所有行
range 扫描部分索引,索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行,常见于BETWEEN、<、>、IN等的查询
index 扫描全部索引树
ALL 全表扫描
>Extra
>>Using index 查询覆盖了索引的,好事情
Using where 使用了WHERE从句来限制哪些行返回给用户
Using temporary 说明使用了临时表,一般看到它说明查询需要优化了
Using filesort 出现在排序时,看到它代表排序是在内存或硬盘中完成的,一般看到它就必须要优化了