linux 在线db服务器 mysql从慢查询日志找到如下连续出现n行的
# Time: 100527 8:10:21
# User@Host: [] @ m [192.168.10.1]
# Query_time: 2 Lock_time: 0 Rows_sent: 49812 Rows_examined: 149436
select distinct id from Out where isHistory='N' order by id;
# Time: 100527 8:10:33
# User@Host: [] @ n[192.168.10.2]
# Query_time: 2 Lock_time: 0 Rows_sent: 49824 Rows_examined: 149472
select distinct id from Out where isHistory='N' order by id;
-----------------现在准备对这个sql进行优化 select distinct id from Out where isHistory='N' order by id;已经建立索引 发现实际不理想,这个sql返回5万条数据。
当前架构如下: (Out 所在地db服务器是 生产机器product机器(数据库主服务器), 2台web服务器(java)也带有仅仅带缓存数据的 mysql db,就是上面的([192.168.10.1] [192.168.10.2]) )这样上面的sql是 [192.168.10.1]发给 生产机器product机器,在生产机器product机器上执行完后返回5万数据给 [192.168.10.1]。现在要对[192.168.10.1]上面的java代码里的那个sqlselect distinct id from Out where isHistory='N' order by id;
进行优化 , 这个数据返回是中度。(最大一个表select distinct id from OutMax where isHistory='N' order by id;返回22万 )申明一点:返回到[192.168.10.1]的5万数据不会再jsp里显示,仅仅在内存里使用完就释放掉当前有2个不清楚
1 这个可以优化吗? (他不在jsp里显示,不好用limit 划分语句或页面。)
2 # Time: 100527 8:10:21
# Time: 100527 8:10:33
甚至没几秒这个语句就执行一次。 他是高密度执行的sql (估计多个线程执行)。有什么方法可以 进行优化 ???
# Time: 100527 8:10:21
# User@Host: [] @ m [192.168.10.1]
# Query_time: 2 Lock_time: 0 Rows_sent: 49812 Rows_examined: 149436
select distinct id from Out where isHistory='N' order by id;
# Time: 100527 8:10:33
# User@Host: [] @ n[192.168.10.2]
# Query_time: 2 Lock_time: 0 Rows_sent: 49824 Rows_examined: 149472
select distinct id from Out where isHistory='N' order by id;
-----------------现在准备对这个sql进行优化 select distinct id from Out where isHistory='N' order by id;已经建立索引 发现实际不理想,这个sql返回5万条数据。
当前架构如下: (Out 所在地db服务器是 生产机器product机器(数据库主服务器), 2台web服务器(java)也带有仅仅带缓存数据的 mysql db,就是上面的([192.168.10.1] [192.168.10.2]) )这样上面的sql是 [192.168.10.1]发给 生产机器product机器,在生产机器product机器上执行完后返回5万数据给 [192.168.10.1]。现在要对[192.168.10.1]上面的java代码里的那个sqlselect distinct id from Out where isHistory='N' order by id;
进行优化 , 这个数据返回是中度。(最大一个表select distinct id from OutMax where isHistory='N' order by id;返回22万 )申明一点:返回到[192.168.10.1]的5万数据不会再jsp里显示,仅仅在内存里使用完就释放掉当前有2个不清楚
1 这个可以优化吗? (他不在jsp里显示,不好用limit 划分语句或页面。)
2 # Time: 100527 8:10:21
# Time: 100527 8:10:33
甚至没几秒这个语句就执行一次。 他是高密度执行的sql (估计多个线程执行)。有什么方法可以 进行优化 ???
说高并发环境不是适合复合索引 。 (这里id就是主键,每个id都不同的
按道理没有必要再建立 符合索引
)
在线db是 2s (这个是最快的)
硬件问题是王道
另外我建立复合索引 ,用强制索引。 速度比以前要快。 但用工具执行的时候总是有个停顿之后出数据,没有加强制索引的没有停顿 (这个停顿就是强制索引引起 是否在编译sql)
percent是 30%左右。 问这个强制索引有必要否
mysql的书不太多 , 反复测试总结 解决问题是最主要的。
前面做的就是按书上来的