优化数据类型
--避免使用NULL,NULL需要特殊处理,大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默认值。
--尽可能使用更小的字段,MySQL从磁盘读取数据后是存储到内存中的,然后使用CPU周期和磁盘I/O读取它,这意味着越小的数据类型占用的空间越小。
小心字符集转换
--客户端或应用程序使用的字符集可能和表本身的字符集不一样,这需要MySQL在运行过程中隐含地进行转换,此外,要确定字符集如UTF-8是否支持多字节字符,因此它们需要更多的存储空间。
优化子查询
--遇到子查询时,MySQL查询优化引擎并不是总是最有效的,这就是为什么经常将子查询转换为连接查询的原因了,优化器已经能够正确处理连接查询了,当然要注意的一点是,确保连接表(第二个表)的连接列是有索引的,在第一个表上MySQL通常会相对于第二个表的查询子集进行一次全表扫描,这是嵌套循环算法的一部分。
优化UNION
--在跨多个不同的数据库时使用UNION是一个有趣的优化方法,UNION从两个互不关联的表中返回数据,这就意味着不会出现重复的行,同时也必须对数据进行排序,我们知道排序是非常耗费资源的,特别是对大表的排序。
--UNION ALL可以大大加快速度,如果你已经知道你的数据不会包括重复行,或者你不在乎是否会出现重复的行,在这两种情况下使用UNION ALL更适合。此外,还可以在应用程序逻辑中采用某些方法避免出现重复的行,这样UNION ALL 和UNION返回的结果都是一样的,但UNION ALL不会进行排序。