gpt4 book ai didi

mysql - 需要帮助优化 mysql 查询以使其按索引快速排序

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

有人帮我提出了这个查询,但它仍然太慢;排序方式减慢了速度,我认为它没有使用我的索引我希望有人可以帮我修复它:D 是的,我读了 manual页面,但我无法理解。

查询:

 EXPLAIN SELECT u.id, u.url, u.title, u.numsaves
FROM urls u
JOIN tags t ON t.url_id = u.id
AND t.tag = 'osx'
ORDER BY u.numsaves DESC
LIMIT 20

Showing rows 20 - 19 ( 20 total, Query took 1.5395 sec) [numsaves: 6130 - 2107]


id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t ref tag_id tag_id 767 const 49432 Using where; Using index; Using temporary; Using filesort
1 SIMPLE u eq_ref PRIMARY,id_numsaves_IX PRIMARY 4 jcooper_whatrethebest_urls.t.url_id 1

数据库:

 CREATE TABLE `urls` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` text NOT NULL,
`domain` text,
`title` text NOT NULL,
`description` text,
`numsaves` int(11) NOT NULL,
`firstsaved` varchar(256) DEFAULT NULL,
`md5` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `md5` (`md5`),
KEY `id_numsaves_IX` (`id`,`numsaves`)
) ENGINE=InnoDB AUTO_INCREMENT=2958560 DEFAULT CHARSET=utf8

CREATE TABLE `tags` (
`url_id` int(11) DEFAULT NULL,
`hash` varchar(255) NOT NULL,
`tag` varchar(255) NOT NULL,
UNIQUE KEY `tag_id` (`tag`,`url_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

最佳答案

我认为您的查询的主要问题是您对索引的选择。

1) tagstagurl_id 上有复合 UNIQUE KEY,但没有 PRIMARY KEY .

如果不出意外,您应该将其设为主要 - 这可能会对性能有所帮助。此外,您可能需要仔细查看 VARCHAR(255) 对于您的标记是否确实必要。这使得索引相当大。

2) 在 numsaves 上添加一个单独的索引,因为您是按该索引进行排序的。 idnumsaves 上的复合索引在这里没有帮助。

3) EXPLAIN 表示 tags 中有 49432 行与 "osx" 匹配。这是相当多余的。您可能希望将标记表拆分为两个,一个包含文本,另一个包含指向 url 的 N:M 链接。

关于mysql - 需要帮助优化 mysql 查询以使其按索引快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16113361/

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