比如1个数据库连接,串行执行:
select * from table1 where field1 like '%abc%' 耗时50ms
select * from table2 where field1 like '%abc%' 耗时50ms
select * from table3 where field1 like '%abc%' 耗时50ms
select * from table4 where field1 like '%abc%' 耗时50ms
select * from table5 where field1 like '%abc%' 耗时50ms5个数据库连接,并行同时执行:
select * from table1 where field1 like '%abc%' 耗时220ms
select * from table2 where field1 like '%abc%' 耗时220ms
select * from table3 where field1 like '%abc%' 耗时220ms
select * from table4 where field1 like '%abc%' 耗时220ms
select * from table5 where field1 like '%abc%' 耗时220ms为什么并行执行,查询效率明显比串行低(同一张表,原先只要50ms,现在却要220ms),是不是mysql端没有优化好?

解决方案 »

  1.   

    并行执行220ms
    串行总共250ms
      

  2.   

    这举个例子,实际上有60多张表,主键做like查询,总共要花7秒,现在想弄成多线程的,本想至少可以缩减到2s,结果发现单线程查询只要200ms,多线程查询时,却花掉500ms。是不是同时做查询,mysql服务端却是一个一个地串行执行
      

  3.   

    普通硬盘都有几十M的读取速度,这点查询数据量,应该没问题吧。看了下,有可能时间是花在sending data上了
      

  4.   

    like   '%abc% '-------------都是这种前面有百分号的么?这种无法用索引,都要用表扫描。也就是说并行表扫描的效率比拼。----这是问题问题分析:
    1 和硬盘有关
    2 和缓存有关。
    3 可以分别测多核cpu+innodb pk myisam ,也就是说和cpu核数和存储引擎有关。可以试着测测并行数逐渐增加的情况下,性能的差异。
      

  5.   

    你没法用索引,只能扫描全表,纯粹硬件限制。
    单线程下,磁头重头扫描到尾
    多线程下,线程1要读A区,线程2有命令它去S区,线程3又命令它到B区,线程4又需要它去X区,来回移动,速度当然慢了。
      

  6.   

    没实际经验。但据说,oracle的数据和索引的表空间,最好分别独自占据一块物理硬盘