1. 对需要查询和排序的字段要加索引。
2. 在一定环境下,leftjoin还是比普通连接查询效率要高,但是要尽量少地连接表,并且在做连接查询时注意观察索引是否起了作用。
3. 排序尽量对第一个表的索引字段进行,可以避免mysql创建临时表,这是非常耗资源的。
4. 对where条件里涉及到的字段,应适当地添加索引,这样会对排序操作有优化的作用。
5. 在做随机抽取数据的需求时,避免使用order byrand(),从上面的例子可以看出,这种是很浪费数据库资源的,在执行过程中用showprocesslist查看,会发现第(3)条有Copying to tmp table ondisk。而对(3)和(4)的对比得知,如果要实现这个功能,最好另辟奚径,来减轻Mysql的压力。
6. 从第4点可以看出,如果说在分页时我们能先得到主键,再根据主键查询相关内容,也能得到查询的优化效果。通过国外《HighPerformance MySQL》专家组的测试可以看出,根据主键进行查询的类似“SELECT ... FROM... WHEREid = ...”的SQL语句(其中id为PRIMARYKEY),每秒钟能够处理 10000次以上的查询,而普通的SELECT查询每秒只能处理 几十次到几百次。涉及到分页的查询效率问题,网上的可用资源越来越多,查询功能也体现出了它的重要性。也便是sphinx、lucene这些第三方搜索引擎的用武之地了。
7. 在平时的作业中,可以打开Mysql的Slowqueries功能,经常检查一下是哪些语句降低的Mysql的执行效率,并进行定期优化。
2. 在一定环境下,leftjoin还是比普通连接查询效率要高,但是要尽量少地连接表,并且在做连接查询时注意观察索引是否起了作用。
3. 排序尽量对第一个表的索引字段进行,可以避免mysql创建临时表,这是非常耗资源的。
4. 对where条件里涉及到的字段,应适当地添加索引,这样会对排序操作有优化的作用。
5. 在做随机抽取数据的需求时,避免使用order byrand(),从上面的例子可以看出,这种是很浪费数据库资源的,在执行过程中用showprocesslist查看,会发现第(3)条有Copying to tmp table ondisk。而对(3)和(4)的对比得知,如果要实现这个功能,最好另辟奚径,来减轻Mysql的压力。
6. 从第4点可以看出,如果说在分页时我们能先得到主键,再根据主键查询相关内容,也能得到查询的优化效果。通过国外《HighPerformance MySQL》专家组的测试可以看出,根据主键进行查询的类似“SELECT ... FROM... WHEREid = ...”的SQL语句(其中id为PRIMARYKEY),每秒钟能够处理 10000次以上的查询,而普通的SELECT查询每秒只能处理 几十次到几百次。涉及到分页的查询效率问题,网上的可用资源越来越多,查询功能也体现出了它的重要性。也便是sphinx、lucene这些第三方搜索引擎的用武之地了。
7. 在平时的作业中,可以打开Mysql的Slowqueries功能,经常检查一下是哪些语句降低的Mysql的执行效率,并进行定期优化。