2016-03-15 197 views
0

我对MySql数据库并行运行查询。每个查询都需要不到一秒钟的时间,而另一半则需要一秒钟的时间才能提取。MySql缓慢并发查询

这对我来说是可以接受的。但是,当我并行运行这些查询中的10个,然后在另一个会话中尝试另一个查询时,所有查询都会变慢,而且一个查询可能需要大约20多秒。

我的ORM是hibernate,我正在使用C3P0<property name="hibernate.c3p0.max_size">20</property>。我通过使用Java线程并行发送查询。但我不认为这些是相关的,因为当我在MySql Workbench中运行查询时也会发生放缓。所以我假设我的MySql配置中缺少某些东西,或者机器速度不够快。

这是查询:

select 
    * 
FROM 
    schema.table 
where 
    site = 'sitename' and (description like '% family %' or title like '% family %') 
limit 100 offset 0; 

我怎样才能让面临比方说100个并发查询时,该走的更快?

+1

您可以在'description'和'title'上使用全文索引。 –

+0

我们在谈论多少条记录? –

+0

@SanderdeJong 100万。 – Eddy

回答

1

我猜这是慢的,因为where子句正在描述和标题列上进行全文搜索;这将要求数据库查看每条记录的整个字段,而且这绝不会扩大。

这10个并发查询中的每一个都必须读取100万行才能完成查询。如果系统中任何地方存在瓶颈 - 磁盘I/O,内存,CPU - 您可能不会遇到单个查询的瓶颈,但是您可以用10个并发查询命中。你可以使用these tools之一来找出你打的瓶颈。

大多数情况下,这些瓶颈(CPU,内存,磁盘)升级太昂贵 - 尤其是如果您需要扩展到100个并发查询时。所以最好优化查询/ ORM方法。

我想在这里使用Hibernate的内置free text capability - 它需要一些额外的配置,但在文本字段中查找任意字符串时效果会更好。

+0

但是,当我发送一个查询它的工作速度不够快。问题是我在同一时间发送了10个。 – Eddy