查询数据避免使用:select *:这种方式虽然可以简化开发,但是会造成覆盖索引这样的优化手段失效,也会增加磁盘I/O,内存和CPU的开销等,所以尽量使用select t.id, t.name ...的查询sql,因为这种形式能更好的利用索引。
假设:某个表中,数据有N条,百万级以上
①通过id(唯一)检索,需要访问N/2条数据才能找到数据,不过id是经过排序的,那么就可以建立二叉树用二分法查找,只要比较log2 N次,大大提高了性能。(在一个有1w条数据的表中,查询name=“yk”的数据(假设有100个人叫yk),使用explain select * from table where name=“yk”,①如果这个字段没有索引,那么结果检测出来的rows(查询的行数)=1w。②如果这个字段建立了索引,那么结果检测出来的rows=100。检索的效果大大增加)
结论:建立索引之后,再次查询,会通过yk的键值来查找数据,索引通过键值的排序来定位数据的位置,因此直接定位到那100条数据,所以相比从整张表中扫描数据,速度快得多。
②什么情况创建索引?
1、经常要搜索的列上建立索引,可以加快搜索的速度。
2、在作为主键的列上。
3、在经常用作连接的列上,一般都是外键,可以加快连接速度。
4、在经常需要根据范围搜索的列上加上索引,因为索引已经排序,其指定的范围是连续的。
5、在经常需要排列的列上建立索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序的速度。
6、在使用在where后的列上加上索引,加快条件的判断速度。