作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个很大的 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/
我是一名优秀的程序员,十分优秀!