【问题标题】:How to make fast count() in MySQL如何在 MySQL 中快速计数()
【发布时间】:2014-08-14 11:08:14
【问题描述】:

我有两张桌子。第一个表(NESNE 表)是我正在搜索的主表,其中包含书籍信息。第二张桌子(ciltkopyatable)有很多书。所以一本书可以有 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

谢谢 :)

【问题讨论】:

  • 你有什么索引?
  • 请显示您的表定义,包括索引。查询速度有多快?每个表大约有多少行?

标签: mysql sql performance count


【解决方案1】:

假设formdatac 中,我首先将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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多