mysql:复制数据或类似子句

mysql:复制数据或类似子句,mysql,sql,performance,Mysql,Sql,Performance,我在数据库中有一个表,其中存储了有关服务器上某些文件的信息,如时间戳、所有者、关键字 现在我只需要使用时间戳、所有者、关键字或该字段的任意组合来搜索该表中的元素 现在,关键字包含多个关键字,但对于搜索,只允许一个关键字,我的研究应该尽可能快。表将包含大量条目 现在使用LIKE子句作为 SELECT * FROM table WHERE keywords LIKE '%to_search%' 或者为每个关键字创建一个表,并在其中存储数据时间戳和所有者,并具有大量数据冗余?在规范化数据库设计中,您

我在数据库中有一个表,其中存储了有关服务器上某些文件的信息,如时间戳、所有者、关键字

现在我只需要使用时间戳、所有者、关键字或该字段的任意组合来搜索该表中的元素

现在,关键字包含多个关键字,但对于搜索,只允许一个关键字,我的研究应该尽可能快。表将包含大量条目

现在使用LIKE子句作为

SELECT * FROM table WHERE keywords LIKE '%to_search%'

或者为每个关键字创建一个表,并在其中存储数据时间戳和所有者,并具有大量数据冗余?

在规范化数据库设计中,您将为每个文件、关键字以及文件和关键字之间的关系创建一个表

因此,KEYWORDS表看起来像主键:keyword\u id

keyword_id  keyword_desc
1           test
2           mysql
3           query
4           database
file_id  keyword_id
1        1
1        3
2        2
。。。FILES表看起来像主键:file\u id

file_id timestamp    owner
1       2013-04-12   John
2       2013-01-01   Joseph
…并且FILES\u KEYWORDS表看起来像主键:file\u id,keyword\u id

keyword_id  keyword_desc
1           test
2           mysql
3           query
4           database
file_id  keyword_id
1        1
1        3
2        2
然后可以查询包含关键字的文件,如下所示:

SELECT f.*
FROM files f
INNER JOIN
(
SELECT fk.file_id file_id
FROM files_keywords fk
INNER JOIN keywords k
ON fk.keyword_id = k.keyword_id AND k.keyword_desc = <search keyword>
) files_with_keywords
ON f.file_id = files_with_keywords.file_id;
替换为要执行搜索的关键字


通过这种方式,索引将按预期使用,从而提供最佳性能。

拥有像%something%这样的索引几乎从来没有比这更有效,因为索引不能在两端都使用通配符。如果您能够对设计进行规范化,并为关键字编制索引,这可能会更快,但我们没有太多的详细信息。关键字字段包含创建新文件时用户指定的默认关键字的可变数量。a u use=>SELECT*from table WHERE关键字,如“%to_search%”。在一个空格的末尾看到单词的末尾,seaparate类似于单词的子句比重复数据要有效得多?