在面对非常大数据量的工作下,不仅要准确查询出想要的结果,对它们的优化也是非常重要的,主要从以下几方面来考虑:
1)查询需要的列 代替 select *
当一个表中的数据有数万、数百万时,查询出列表中的所有列开销非常大,尤其是表做 join 连接时,更要避免这种情况;
2)避免索引失效的情况 AND 避免全表扫描的情况
(1) 表达式左边有计算(表达式、函数)
例如 where 年龄+5>30 VS 年龄>30-5,右边的性能更高
(2)避免使用 or 字段
or字段会导致数据库选项进行全表扫描。如果遇到有或者逻辑的查询需求时,可以选用union方式来代替,第二种方式会快很多。例:
select 名字 from 员工表 where 年龄=25 or 年龄=26 VS
select 名字 from 员工表 where 年龄=25 union select 名字 from 员工表 where 年龄=26
(3) 使用limit子句限制返回的数据行数
如果需要的数据行数 有明确要求,使用limit 来限制返回的数据行数比较好。
**行列 转换的例子:**
年级 班级 人数 年级 c1 c2 c3 c4 c5
1 c1 20 1 20 25 28 25 35
1 c2 25