如何在MySQL中快速计数()

时间:2014-08-14 11:08:14

标签: mysql sql performance count

我有两张桌子。第一个表(NESNE表)是我正在搜索的主表,并且有书籍信息。第二个表(ciltkopya表)有大量的书籍。所以一本书可以有1,2,3 ..和更多的卷。我想表明数据库上有多少卷。我有以下查询,它的工作原理。但它是slow。我怎样才能fast呢?

SELECT count(*) 
FROM nesne n 
LEFT JOIN ciltkopya c ON n.id = c.nesne_id
WHERE MATCH(`n.formdata`) AGAINST('world' IN BOOLEAN MODE)

当我查询EXPLAIN我的查询时,请执行以下操作:

http://i.stack.imgur.com/jWCef.png


好的我弄清楚了。解决方案:

  

SELECT count(c.nesne_id)FROM ciltkopya c JOIN(SELECT id FROM nesne WHERE MATCH(formdata)AGAINST('world'IN BOOLEAN MODE))n ON n.id = c.nesne_id

Thaks:)

1 个答案:

答案 0 :(得分:0)

假设formdata位于c,我首先要将left join更改为inner join

SELECT count(*)
FROM nesne n JOIN
     ciltkopya c
     ON n.id = c.nesne_id
WHERE MATCH(c.formdata) AGAINST('world' IN BOOLEAN MODE);

其次,我会质疑是否需要join。这可能会做你想要的:

SELECT count(*)
FROM ciltkopya c
WHERE MATCH(c.formdata) AGAINST('world' IN BOOLEAN MODE);

如果formdata确实在n,那么您可能根本不需要join