索引数据库中的每个字段

Index every field in a DB

我有一个基本上像网格一样运行的应用程序,用户可以在其中查看数据和 sort/filter 任何列。这是一个非常小的数据量(~200K 行/50MB),但太大而无法轻松地放入浏览器并在 javascript.

中完成

我想到的 crudest/simplest 方法是将它存储在 mysql table 中,每个列都有一个索引(是的,每个 列)。 database/table 大约是 99% 读取/1% 写入,所以我不太担心插入时间是否增加 100 倍左右。

这样做有什么缺点吗?我应该关注哪些事情?有没有更好的(服务器端)方法来做这样的事情?

如果是 "words",将它们全部放入一个列中,以空格分隔。然后在该列上添加一个 FULLTEXT 索引。如果您有其他非 'word' 列,您可能也需要为它们编制索引。

警告:FULLTEXT 有几个限制。以及好处(比如singular/plural)。

据推测,除非进行一些过滤,否则您会拒绝显示任何内容?不要告诉我你想让用户分页 200K 行!

你还没有说他们是否可以过滤多列。

您应该在您的应用代码中构造查询。全文的语法不同于等式和范围测试。

如果您被有问题的 EAV 架构设计所吸引,请参阅 http://mysql.rjweb.org/doc.php/eav

我已经漫无目的了;如果你给我们一些数据和查询的线索,我可以更专注。

示例:

CREATE TABLE ... (
    ...
    all_words TEXT NOT NULL,
    LastUpdated DATETIME NOT NULL,
    ...
    FULLTEXT(all_words)
)

SELECT ...
    WHERE MATCH(all_words) AGAINST ('...' IN BOOLEAN MODE)
    ORDER BY LastUpdated DESC
    LIMIT 50;

(注意:由于只使用了一个索引,并且 FULLTEXT 具有优先级,因此 LastUpdated 上的索引对本示例没有用。)