一、基于主键的搜索受数据量的影响不大
100条的表跟100w的表执行上面sql,时间相差不大
二、减小扫描索引表的次数
sql执行最耗时间的是磁头扫描文件块,避免全表扫描的同时 也要减少索引表的访问
三、注意所有的聚合函数(sum max 等)都会全表扫描
四、海量查询时为查询加限定条件(如日期范围),使数据量可控
五、排序操作甚至比扫描表还耗资源,排序是复杂算法,一般会多遍处理
当结果集较小时,排序会发生在内存;而较大时则会使用硬盘了,所以可通过调整排序内存来改善排序性能
排序性能与参与排序的实际总量相关而不是记录数,应尽量减少参与排序的数据总量
六、对数据表进行分区,如常用的范围分区等
通过分区将常用的数据存放在同一物理块,提高了IO速度
七、删除数据,把没用的历史数据删除
删除是最耗时的操作,既要执行where查询、更新数据表、 维护索引表,又要写undo日志等
删除要谨慎 可采用truncate
待续。。。
select * from user where id = ?
100条的表跟100w的表执行上面sql,时间相差不大
二、减小扫描索引表的次数
sql执行最耗时间的是磁头扫描文件块,避免全表扫描的同时 也要减少索引表的访问
三、注意所有的聚合函数(sum max 等)都会全表扫描
四、海量查询时为查询加限定条件(如日期范围),使数据量可控
五、排序操作甚至比扫描表还耗资源,排序是复杂算法,一般会多遍处理
当结果集较小时,排序会发生在内存;而较大时则会使用硬盘了,所以可通过调整排序内存来改善排序性能
排序性能与参与排序的实际总量相关而不是记录数,应尽量减少参与排序的数据总量
六、对数据表进行分区,如常用的范围分区等
通过分区将常用的数据存放在同一物理块,提高了IO速度
七、删除数据,把没用的历史数据删除
删除是最耗时的操作,既要执行where查询、更新数据表、 维护索引表,又要写undo日志等
删除要谨慎 可采用truncate
待续。。。