首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql --选择带有校验和值的行

Mysql --选择带有校验和值的行
EN

Stack Overflow用户
提问于 2018-01-04 13:38:30
回答 1查看 701关注 0票数 1

我正在设计一个带有mysql数据库的小型电子商务网站。我想保持URL的清洁,没有任何硬编码的产品id。

因此,给定路径http://example.com/shop/{product}

我选择在PHP中将{ product }转换为crc32校验和,并将其存储在product中。

当收到产品页的请求时,它将转换为crc32校验和,并查询匹配的行。我这样做只是为了产品页面和博客页面。

我的问题

  1. 到目前为止,它在本地主机上运行得很好。一旦流量增加,这会是一个可伸缩的解决方案吗?有办法测试这个吗?
  2. 索引校验和列是否有助于选择查询? 校验和INT唯一不为空

我看过insert语句会受到性能的影响。但假设插入是偶然的(博客或新产品可能每三个月一次,每周2-3次),2-3秒的时间是可以接受的。情况会有多糟?

  1. 是否将校验和值存储为二进制更好?考虑在每个请求之前将校验和转换为二进制的附加任务。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-04 14:05:24

我正在设计一个带有mysql数据库的小型电子商务网站。我想保持URL的清洁,没有任何硬编码的产品id。 因此,给定路径http://example.com/shop/{product}

例如,你指的是https://example.com/shop/jelly-donuthttps://example.com/shop/coffee。太棒了。很好的搜索引擎优化。

我选择在PHP中将{ product }转换为crc32校验和,并将其存储在product中。

这种方法有几个问题。

  1. 在如此短的校验和中存在潜在的碰撞。多个产品可以很容易地映射到相同的校验和。在你离开很久之前,这是不可能发生的。
  2. 这对于性能来说是不必要的,除非产品表中有数百万行。索引varchar()列的查找速度几乎与整数列的查找速度一样快。
  3. 这是程序上的麻烦。
  4. 在编程完成很久之后,这将是一个维护上的麻烦。
  5. MySQL (和其他数据库系统)是为对各种数据进行快速选择查询而构建的。数千年的程序员(真的!)把这种事搞得太快了。如果你认为你需要通过一个微不足道的优化来改进那些程序员,恕我直言,你错了。当然在这种情况下。

一旦流量增加,这会是一个可伸缩的解决方案吗?

是的,会的。但你的产品名称也是如此。

索引校验和列是否有助于选择查询?

是的,应该索引在SELECT查询中使用的任何一组列。索引是一门艺术。一旦正确地索引了少于一百万行的表,请检查这个https://use-the-index-luke.comSELECT语句应该是快速的和可伸缩的。

如果没有正确地索引表,则无论查找的数据类型如何,查询都将非常缓慢。

我看过insert语句会受到性能的影响。

一次微不足道的打击。每次插入最多几毫秒。

是否将校验和值存储为二进制更好?

如果使用二进制,则每个选择将节省数十微秒。几十微秒并不重要。

考虑在每个请求之前将校验和转换为二进制的附加任务。

这里唯一重要的是编程和维护时间。

保持你的系统简单。不要借用麻烦,特别是关于不同类型数据类型搜索之间的差异的想象中的麻烦。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48096548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档