gpt4 book ai didi

sql - 在 DB 中使用 MD5(URL) 代替 URL for WHERE

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

我有一个很大的 MySQL InnoDB 表(大约 100 万条记录,每周增加 300K)让我们以博客文章为例。该表有一个带索引的 url 字段。

通过在其中添加新记录,我正在检查具有相同 url 的现有记录。下面是查询的样子:

SELECT COUNT(*) FROM `tablename` WHERE url='http://www.google.com/';

目前系统每秒产生大约 10-20 个查询,这个数量将会增加。我正在考虑通过添加附加字段(即 URL 的 MD5 哈希值)来提高性能。

SELECT COUNT(*) FROM `tablename` WHERE md5url=MD5('http://www.google.com/');

因此它会更短且长度恒定,与 URL 字段相比更适合索引。大家怎么看呢。有道理吗?

我 friend 的另一个建议是使用 CRC32 而不是 MD5,但我不确定 CRC32 的结果有多独特。让我知道您对 CRC32 的看法。

更新:每一行的 URL 列都是唯一的。

最佳答案

在 URL 上创建非聚集索引。这将使您的 SQL 引擎在内部进行所有优化并产生最佳结果!

如果您在 VARCHAR 列上创建索引,SQL 无论如何都会在内部创建一个散列,使用该索引可以提高一个数量级甚至更多的性能!

此外,如果您只检查 URL 是否存在,请记住,某些 SQL 产品会通过这样的查询产生更快的结果:

IF NOT EXISTS(SELECT * FROM `tablename` WHERE url='')
-- return TRUE or do your logic here

关于sql - 在 DB 中使用 MD5(URL) 代替 URL for WHERE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395091/

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