【问题标题】:Database design for dictionary site词典网站的数据库设计
【发布时间】:2021-01-22 16:34:17
【问题描述】:

对于一个单语词典,大概10k字左右,有些单词重复但意思不同,单表设计可以吗?

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| word       | varchar(128) | NO   |     | NULL    |                |
| definition | varchar(500) | NO   |     | NULL    |                |
| example    | text         | NO   |     | NULL    |                |
| date       | datetime     | NO   |     | NULL    |                |
| votes      | int(4)       | NO   |     | 0       |                |
| name       | varchar(30)  | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

我使用的示例查询:

SELECT * FROM definitions WHERE word = ? ORDER BY votes DESC LIMIT 10
SELECT word, definition FROM definitions ORDER BY date DESC LIMIT 4
SELECT DISTINCT word FROM definitions WHERE word LIKE ? LIMIT 100

每次有人投票时,投票行都会更新。

改为使用一对多设计会更好吗?我的主要目标是性能。

【问题讨论】:

  • 有 10j 行,只有一些加倍不,如果您需要其他单词并且不介意加入,请继续
  • 请在代码问题中给出minimal reproducible example--包括剪切、粘贴和可运行的最小代码和以代码形式给出的最小代表性数据。对于包含 DBMS 和 DDL 的 SQL,包括约束、索引和表格初始化。对于包括 EXPLAIN 结果和统计信息的 SQL 性能。请研究和总结。对于包括优化/性能基础的 SQL——立即导致索引、计划、统计和 SARGability。 Tips for asking a good SQL question 学习并应用这些基础知识后,请重新优化。 How to Ask

标签: mysql sql database database-design


【解决方案1】:

您的表看起来很稳定,只会对其执行搜索。 唯一会导致表执行插入或更新操作的列可能会影响您的性能。您应该只获得其他表格的投票以及单词 id。每当插入投票时,它都不会在您的主表上执行插入操作。从长远来看,这将提高您的餐桌性能。 使用连接从两个表中选择数据。

【讨论】:

    【解决方案2】:

    对于只有 10K 字(或者您的意思是行)和这些查询,性能将“足够好”。但是,这些是必需的:

    INDEX(date)
    INDEX(word, votes)
    

    提示.. 如果经常出现新定义,那么ORDER BY votes DESC LIMIT 10 往往不会显示它们(当超过 10 个时)。因此,您可能应该有一些公式,其中涉及添加定义的日期和投票数。它可能类似于votes / TIMESTAMPDIFF(DAY, date, NOW()) 或缓和它:(votes + 1) / DATEDIFF(DAY, date, NOW() + INTERVAL 2 DAY)。那将进入ORDER BY

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多