【问题标题】:Design MySQL table to get Improve SELECT speed [closed]设计 MySQL 表以提高 SELECT 速度
【发布时间】:2018-11-06 21:51:28
【问题描述】:

我正在为网站设计简单的支持功能。
用户可以打开有问题的票证,并从支持人员那里获得重播,其他站点用户也可以重播他的票证。

为此目的,数据库将有 2 个表,为了简化事情,我将只描述相关的列。

  1. ticket_header 包含以下列:
    ticket_id(BIGINT, Primary), email_ticket_owner(VARCHAR), ...

  2. tickets_cmets 包含以下列:
    number(BIGINT)、ticket_id(BIGINT)、email_ticket_commenter(VARCHAR),...

对于每张票,在ticket_header 表中只有一个条目,而在tickets_cmets 表中可以有无限个条目。 每个表都应该有大量的条目。

我的问题是:
什么是推荐的方式,性能明智,在表tickets_cmets 中定义索引,以便我可以从数十亿条目中尽快选择具有相同ticket_id 的所有条目。 我的查询是:

SELECT *  
FROM   tickets_comments  
WHERE  ticket_id = 1234;

【问题讨论】:

  • 如果可能,请尝试以SHOW CREATE TABLE 形式显示您的架构,以便我们可以在您已有的基础上进行构建。这些可以放入本地 MySQL 服务器进行测试,或者像 SQLFiddle 这样的在线工具。

标签: mysql sql database-design query-optimization


【解决方案1】:

为ticket_id创建索引

创建索引idx_tickets_comments_ticket_id ON tickets_comments (ticket_id) COMMENT ''

【讨论】:

  • 您可以将 idx_tickets_cmets_ticket_id 更改为您想要的任何内容,您还可以在单​​引号之间的末尾添加注释。
【解决方案2】:

对于这个查询:

SELECT *  
FROM tickets_comments  
WHERE ticket_id = 1234;

您希望在tickets_comments(ticket_id) 上建立索引。

这在内存方面可能会变得很棘手——如果您的表和索引都不能放入内存中。您可能希望选择有限数量的列 - 并将这些列包含在索引中。

【讨论】:

  • 我正在使用 phpMyAdmin,你的意思是在索引选项下为 ticket_id 列选择 INDEX
  • @teachme 。 . .这可能是一种方法。我会运行create index
【解决方案3】:

没有什么可以改进的...你在ticketid上建立索引了吗?

【讨论】:

    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 2018-06-13
    • 2015-06-21
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2023-04-01
    • 2011-01-02
    相关资源
    最近更新 更多