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

发布于 2022-09-01 16:44:22 字数 403 浏览 31 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

迷爱 2022-09-08 16:44:22

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

花开柳相依 2022-09-08 16:44:22

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

仅一夜美梦 2022-09-08 16:44:22

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

半世晨晓 2022-09-08 16:44:22

我觉得使用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的旧语法

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文