MySql优化(持续更新!)

在面对非常大数据量的工作下,不仅要准确查询出想要的结果,对它们的优化也是非常重要的,主要从以下几方面来考虑:
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                  2        35     22    53      18     20
           1       c3       28                  
           1       c4        25                  
           1       c5        35                  
           2       c1       35                  
           2       c2       22                  
           2       c3       53                  
           2       c4       18                  
           2       c5       20                  

这种行列转换问题,就是将一维表转化为二维表:
select 年级,
max(case 班级 when ‘1’ then 人数 else 0 end) as c1,
max(case 班级 when ‘2’ then 人数 else 0 end) as c2,
max(case 班级 when ‘3’ then 人数 else 0 end) as c3,
max(case 班级 when ‘4’ then 人数 else 0 end) as c4,
max(case 班级 when ‘5’ then 人数 else 0 end) as c5
from 表名
group by 年级;

你可能感兴趣的:(大数据基本工具)