带有连接的 SQL 选择查询执行速度慢

问题描述 投票:0回答:1

我有一个

newsfeed
,用户可以
add posts
。我还有一些社区,它们使用与非社区帖子相同的数据库表。以下查询
selects data
从我所属的社区以及公共帖子中添加,但执行速度非常慢。你能帮忙吗?

SELECT NF.postID,NF.userID,NF.url,NF.post,NF.context,NF.topic,NF.style,NF.type,NF.kind,NF.placeID,NF.audience,NF.itemID,NF.updated,NF.added,NF.expiry
FROM newsfeed NF
WHERE placeID IN (SELECT cmtyID
                  FROM cmty_members
                  WHERE userID = '$ini'
                  AND role !='pending'
                  AND role !='removed')
OR (placeID = '0' AND type = 'feed')
ORDER BY postID DESC

我尝试了内部联接,但没有产生所需的输出

CREATE TABLE `cmty_members`
    (`mid` int(11) NOT NULL,
     `userID` int(11) NOT NULL,
     `cmtyID` int(11) NOT NULL,
     `role` enum('member','admin','moderator','removed','pending') NOT NULL DEFAULT 'member',
     `notifs` enum('enabled','disabled','','') NOT NULL DEFAULT 'disabled',
     `sortpostsby` enum('new_posts','top_posts','newest_activity','') NOT NULL DEFAULT 'new_posts',
     `added` timestamp NOT NULL DEFAULT current_timestamp()
    )
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;


CREATE TABLE `newsfeed`
    (`postID` int(11) NOT NULL,
     `userID` int(11) NOT NULL,
     `token` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
     `url` text NOT NULL,
     `post` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
     `context` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
     `topic` text NOT NULL,
     `style` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
     `type` enum('feed','moment','removed','pending') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'feed',
     `kind` enum('shared-post','duel-campaign','self-deleting','moment','profile','poll','games','repost','boost','cmtyInvite','cmtyDP','cmtyCDP') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
     `placeID` int(11) NOT NULL,   `audience` enum('public','friends') NOT NULL DEFAULT 'public',
     `canReply` enum('everyone','friends','nobody') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'everyone',
     `itemID` int(11) NOT NULL,
     `updated` timestamp NULL DEFAULT NULL,
     `added` timestamp NOT NULL DEFAULT current_timestamp(),
     `expiry` bigint(20) DEFAULT NULL
    )
ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
mysql join query-optimization
1个回答
0
投票

我曾经尝试过的代码 $sql = "选择 NF.postID,NF.userID,NF.url,NF.post,NF.context,NF.topic,NF.style,NF.type,NF.kind,NF.placeID,NF.audience,NF .itemID,NF.updated,NF.added,NF.expiry FROM newsfeed NF JOIN cmty_members ON cmty_members.cmtyID = NF.placeID WHERE cmty_members.userID = '{$ini}' UNION (SELECT NF.postID,NF.userID,NF .url、NF.post、NF.context、NF.topic、NF.style、NF.type、NF.kind、NF.placeID、NF.audience、NF.itemID、NF.updated、NF.add、NF.expiry FROM newsfeed NF WHERE placeID = '0' AND type = 'feed' AND Audience = 'public') ORDER BY postID DESC";

© www.soinside.com 2019 - 2024. All rights reserved.