某种特定查询条件下的MYSQL效率问题

SELECT count(*) FROM 表1,表2 WHERE 表1.type='text' AND 表1.tid=表2.id AND 表2.user='b';

我在表1里建立了索引tid和type,但这句话的效率依然极烂,大约要执行2秒以上。

请问这种查询条件下,我该如何建立索引(或者改写语句)才能让查询效率高起来

Explain的结果如下

1    SIMPLE    表1    ALL    tid,type    NULL    NULL    NULL    114299    Using where
1    SIMPLE    表2    eq_ref    PRIMARY    PRIMARY    4    user.表1.tid    1    Using where
阅读 3.8k
4 个回答

explain //你的SQL语句
就可以分析性能。上面的太过于笼统了。因为系统都不知道。。。
和join没太大的关系吧。反正基本都是笛卡尔积。left.right.都不会对性能有多大影响。

表2.user这个字段也要建立索引,否则对表1的tid和type建立索引也不会有太大提高

数据条数越多 count 效率越低下, 好像没什么好办法, 所以所有的计数都应该单独记录.

我觉得使用JOIN ... ON语法查询效率会有所提升,按你的实际情况可用LEFT JOINRIGHT JOIN
你可以试试

SELECT count(*) FROM t1
INNER JOIN t2
ON t1.tid=t2.id
WHERE t1.type='text'
    AND t2.user='b';

FROM t1, t2 这种是ANSI SQL-89的旧语法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进