Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL:在给定的场景中,我应该创建哪个索引?_Mysql_Indexing_Full Text Search - Fatal编程技术网

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”?或者列出喜欢的人和时间的详细信息。