本帖最后由 quweidou 于 2010-09-23 07:14:42 编辑

解决方案 »

  1.   

    2、例如:SELECT * FROM t1 WHERE a=0 and (b=1 and c=1) or (b<=1 and c=0)的语句如何优化,除了用UNION,还有没有更好的方法?
    创建索引 (a,b,c)
      

  2.   

    mysql proxy实现读写分离,这样是减少同一个数据库的并发访问。 单个大表进行分表,这个只不过是提高查询速度,减少锁的冲突。 
    具体哪种好,需要看你的实际应用是什么。 总体来说,使用 proxy,相当于添加了CPU速度会提高。
      

  3.   

    索引已加了!例如这样的语句:
    SELECT t1.id,t1.name,sum((t2.a+t2.b+t2.c)*t3.d) as total from t1 left join t2 on t1.id=t2.id group by t1.id order by t1.id desc
    上面这个语句,在t2中,对t2的各个字段进行挺复杂的加减乘减,是不是不能在数据库上进行计算,还放在程序中呢?分别对t1.id,t2.id加了索引,t1有500条数据,t2有12万条数据
    也用EXPLAIN进行分析,t1 type:ALL,  t2 type:ref,查询时间0.7719s
      

  4.   

    上面的语句,加了索引也是全表搜索,我改用了创建了复合索引,拆分成用UNION,效率是明显提高了,我是想问,有没有更好的办法??谢谢!!!
      

  5.   

    SELECT * FROM t1 WHERE a=0 and (b=1 and c=1) or (b<=1 and c=0)这样的全表扫描,也只扫描全部行就完了。你用UNION的话,会做2个全表扫描吧。。贴出你的UNION后的EXPLAIN看看。
      

  6.   

    mysql proxy大并发还是不怎么稳定
      

  7.   

    建立缓存,减少数据库的访问,推荐使用memcached.