我正在针对click()
数据库并行运行查询。每个查询需要不到一秒钟,另一半秒钟到一秒钟来获取。
这对我来说是可以接受的。但是,当我并行运行其中10个查询然后在另一个会话中尝试另一个查询时,一切都会变慢,单个查询可能需要20多秒。
我的ORM是MySql
,我正在hibernate
使用C3P0
。我使用<property name="hibernate.c3p0.max_size">20</property>
个线程并行发送查询。但我不认为这些是相关的,因为当我在Java
中运行查询时也会发生减速。所以我假设我的MySql配置中缺少某些内容,或者机器速度不够快。
这是查询:
MySql Workbench
如果面对100个并发查询,我怎样才能让这个更快?
答案 0 :(得分:1)
我猜这很慢,因为where子句正在对description和title列进行全文搜索;这将要求数据库浏览每条记录上的整个字段,而且这种情况永远不会扩展。
这10个并发查询中的每一个都必须读取100万行才能完成查询。如果你的系统中有任何瓶颈 - 磁盘i / o,内存,CPU - 你可能不会遇到单个查询的瓶颈,但你确实用10个并发查询命中它。您可以使用these tools之一找出您遇到的瓶颈。
大多数情况下,这些瓶颈(CPU,内存,磁盘)升级成本太高 - 特别是如果您需要扩展到100个并发查询。因此,优化查询/ ORM方法会更好。
我考虑在这里使用Hibernate的内置free text capability - 它需要一些额外的配置,但在文本字段中查找任意字符串时效果会更好。