gpt4 book ai didi

php - 将用户评论存储在数据库中

转载 作者:行者123 更新时间:2023-11-29 06:06:00 25 4
gpt4 key购买 nike

我在使用 MySql 时遇到了一些性能问题。选择与特定 url id 相关的评论的查询大约需要 1.5 ~ 2 秒才能完成。

评论表

CREATE TABLE `comments` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`url_id` INT UNSIGNED NOT NULL,
`user_id` INT UNSIGNED NOT NULL,
`published` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`votes_up` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
`votes_down` SMALLINT UNSIGNED NULL DEFAULT 0,
`text` TEXT,

PRIMARY KEY (id),
INDEX (url_id),
INDEX (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我插入了 100.000 条评论,并执行了这个查询:SELECT * FROM comments WHERE url_id = 33 ORDER BY published ASC LIMIT 0,5

这正常吗?一个简单的查询需要将近 2 秒才能完成?我应该为评论的文本创建一个单独的表格吗?

Youtube、Facebook 等拥有数百万(或数十亿)条评论,他们如何快速获得该对象(视频、帖子等)的评论?

继续我的问题:

  1. 我不再担心性能并坚持这一点,当网站达到一定数量的用户事件时,我开始担心这一点。
  2. 如果我需要担心这个,我的表结构有什么问题?我需要更改什么以减少该查询的完成时间?

更新

解释输出:

+----+-------------+----------+------+---------------+----------+---------+-------+------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+----------+---------+-------+------+-----------------------------+
| 1 | SIMPLE | comments | ref | url_id | url_id | 4 | const | 549 | Using where; Using filesort |
+----+-------------+----------+------+---------------+----------+---------+-------+------+-----------------------------+

最佳答案

这里的问题是 mysql 每个表只使用一个索引。这就是为什么没有使用您在 published 上的索引。您的 explain 表明它正在使用索引来识别要返回的行,这使得 RDBMS 无法使用索引进行排序。

你应该做的是在(user_id,published)上创建一个复合索引

关于php - 将用户评论存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41655382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com