RDS优化

一、优化索引
数据库查询时OLTP类应用中常见的操作,而良好的索引可以以最少的I/O操作迅速定位到需要查询的数据,因此索引的优化就非常的重要。下面看一个例子:
未经优化的SQL语句如下:
select person_role_id from movie where movie_id=1000 and role_id=1 order by nr_role desc;
首先可以考虑针对where条件创建组合索引:
alter table movie add index ind_movie(movie_id,role_id);
其次,参与排序的字段也可以并入组合索引:
alter table movie add index ind_movie(movie_id,role_id,nr_role);
最后,考虑到需要查询的字段,希望直接从索引中得出查询结果,可以将被查询字段也并入组合索引,形成覆盖索引:
alter table movie add index ind_movie(movie_id,role_id,nr_role,person_role_id);
二、优化分页
分页操作是mysql优于oracle的一个功能,但是普通limitM,N的翻页写法,往往越往后翻页速度越慢,原因是mysql会读取表中的前M+N条数据,M越大,性能就越差。
普通写法:
select * from t where sellerid=100 limit 100000, 20;
针对该问题的优化写法如下:
select t1.*from tt1,
(select id from t where sellerid=100 limit 100000,20)t2 where t1.id=t2.id;
在优化后的翻页写法中,先查询翻页中需要的N条数据的主键ID,再根据主键ID回表中查询所需要的N条数据。此过程中,查询N条数据的主键ID的工作在索引中完成。这种写法下,翻页性能基本恒定,不受页数的影响。
注意:为了实现更好的优化效果,需要在t表的sellerid字段上创建索引,命令为create index ind_sellrid on t(sellerid).

你可能感兴趣的:(杂项,mysql)