MYSQL:在给定的场景中,我应该创建哪个索引?
假设 我有一个网站,根据标签、上传日期以及用户是否不喜欢该帖子来显示帖子 我将在标签列上创建全文索引 所以,我应该只在标记列上创建索引吗MYSQL:在给定的场景中,我应该创建哪个索引?,mysql,indexing,full-text-search,Mysql,Indexing,Full Text Search,假设 我有一个网站,根据标签、上传日期以及用户是否不喜欢该帖子来显示帖子 我将在标签列上创建全文索引 所以,我应该只在标记列上创建索引吗 或 我应该创建包含所有列的复合索引(多列索引),还是只包含标记列的单个索引? 如果答案是复合指数, 我应该创建什么类型的索引?全文?其他两列(日期和喜好)是否有效 Likes是一个JSON数组,Date只是一个VARCHAR列 JSON可能是不必要的复杂性 我想到了这些表格: Posts: post_id, date_uploaded, ... Tag
或
我应该创建包含所有列的复合索引(多列索引),还是只包含标记列的单个索引?
如果答案是复合指数,
我应该创建什么类型的索引?全文?其他两列(日期和喜好)是否有效
Likes是一个JSON数组,Date只是一个
VARCHAR
列 JSON
可能是不必要的复杂性
我想到了这些表格:
Posts: post_id, date_uploaded, ...
Tags: post_id, tag (a string) (one row per tag)
Likes: user_id, post_id
请注意,Posts:Tags是1:many。喜欢的人也一样
SELECT ...,
p.date_uploaded,
( SELECT GROUP_CONCAT(tag) FROM Tags
WHERE post_id = p.post_id
AND tag = ?
) AS tags,
IF( EXISTS( SELECT 1 FROM Likes WHERE post_id = p.post_id
AND user_id = ? ),
"they like it",
"they don't like it" ) AS liked
FROM Posts AS p
WHERE ...
所需索引:
Tags: INDEX(post_id, tag) -- for "Which Tags does this Post have" (this query)
Tags: INDEX(tag, post_id) -- for "what Posts have this Tag"
Likes: INDEX(user_id, post_id) -- for "what Posts does this user Like"
Likes: INDEX(post_id, user_id) -- for "which users Like this Post"
这实际上取决于在所需查询中如何使用列。因此,为了获得最佳建议,请向我们展示一些查询和数据示例。通常,要索引的列是where子句、order by子句或join语句中使用的列。我还建议开始阅读关于索引优化和使用的书籍。向我们展示表格中一行的示例。特别要注意的是如何处理多个标记,即只搜索一个标记。你在一列中有标签列表吗?是否通过碰撞计数器来存储“like”?或者列出喜欢的人和时间的详细信息。