日期:2014-05-16  浏览次数:20817 次

系统究竟允许存在多少个内存表
架构mysql——linux + linux +apache
在慢查询日志发现比较多的有3-4个表  
a 表 10万 b 表10万 c 20万 (去年年初的时候是3万不到 现在多了速度慢下来)

另外这3个表还是复制表 。 (在线高并发, 这台机器和另外1台机器为复制环境)
太多的慢查询牵涉到这3个表。 已经索引优化 ,加了大量的临时表。

万般无赖下,我开始考虑使用如下策略
a------分别建立对应的内存表a1
b------分别建立对应的内存表 b1
c ------分别建立对应的内存表c1

delete update insert 全部在 a b c 进行
select 全部在a1 b1 c1

高并发环境没有办法 ,几乎把所有方法用过了,目前只能这样用
同意否

(另外当前max-heap-size是1667 0000 请问我最大的内存表可以多大
系统究竟允许存在多少个内存表



------解决方案--------------------
受内存限制。
------解决方案--------------------
20万记录就慢说明设计和SQL语句以及参数的问题都不少,应该还有很大的优化空间。
先加大这几个参数试试
#Temp table
tmp_table_size=128M
max_heap_table_size=128M
max_tmp_tables=128
以上参数值能支撑我们网站100多万记录的数据库,当然还有其他参数

最重要的是设计,MySQL在不同硬件条件时能应对的数据量规模不同,不好的设计使系统很快就达到了环境的上限,如这个贴http://topic.csdn.net/u/20100325/10/801d54f6-121b-4431-873d-e061dc60c6a6.html的问题很明显就出在设计上
SQL语句也是重中之重,实践中大部分性能问题就是不够巧妙的SQL语句造成的,如 select * from tab where field like '...%' limit m,n 之类的SQL语句
第三就是分布式布署,比如您已经采用的“复制”,是很好的办法

......等等
------解决方案--------------------
探讨
select * from 之

这样的sql 如何优化改写??

------解决方案--------------------
探讨

select * from tab where field like '...%' limit m,n 这个语句解释 是走 索引 的

select * from tab where left(field,2)='sa' 这个语句是不走索引 的 。

第三就是分布式布署 (当前我做的是15个表 的复制 发现在从机上执行 sql 比主机器 要慢很多 )