mysql - 使用多个表优化查询

标签 mysql sql

我有一个查询,其中的数据来自多个表。

SELECT iUserID,
       iUserID AS userID,
       (CASE vUSBG
            WHEN 1 THEN 'Yes'
            WHEN 0 THEN 'No'
        END) AS vUSBG,
       concat(vFirstname,' ',vLastname) AS Name,
       vEmail,
       eType,
       eStatus,
       tAddedDate,
       eExpert,
       eAdmin,

  (SELECT count(iUserID) AS total
   FROM tbl_friend
   WHERE iUserID = tbl_user.iUserID) AS count_f,

  (SELECT COUNT(*)
   FROM bar_followers
   WHERE bar_followers.iUserID = tbl_user.iUserID) AS bar_follows,

  (SELECT COUNT(b.iBrandID)
   FROM tbl_company_follow,
        tbl_brand b
   WHERE tbl_company_follow.iUserID = tbl_user.iUserID
     AND b.iCompanyID = tbl_company_follow.iCompanyID) AS brand_follows,

  (SELECT sum(points) AS totalpoints
   FROM tbl_points,
        tbl_post p
   WHERE iUserID = tbl_user.iUserID
     AND p.iPostID = tbl_points.post_id) AS countPoints
FROM tbl_user

此查询花费了 8.3595 秒

我怎样才能最大限度地缩短时间?

最佳答案

除了缺少明确的 join 语法外,您的查询是合理的。

检查以确保您具有以下索引:

  • tbl_friend(iUserId)
  • bar_followers(iUserID)
  • tbl_company_follow(iUserID, iCompanyID)
  • tbl_brand(iCompanyID)
  • tbl_post(iUserID, iPostID)
  • tbl_points(post_id, points)

但是,根据您的数据大小,8-9 秒可能是合理的。

关于mysql - 使用多个表优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32694655/

相关文章:

sql - Oracle SQL 将日期格式从 DD-Mon-YY 转换为 YYYYMM

mysql - 如何在 mysql 中永久设置最大连接数?

python - 如何使用python将数据插入到只有两位小数的表中?

mysql - 替代 WHERE NOT EXISTS 或 LEFT OUTER JOIN 方法

mysql - 获取特定范围内的平均值

mysql - 内连接内的内连接

mysql - 如何按 ID 序列使用 where 子句

javascript - Node.js MySql 如何知道用户 ID 以便在登录后在查询中使用它

sql - 更新表 - 关系不存在

SQL 数据库 View