Mysql - 选择具有校验和值的行

时间:2018-01-04 13:38:30

标签: php mysql

我正在设计一个带有mysql数据库的小型电子商务网站。我希望保持URL干净,没有任何硬编码的产品ID。

给定路径http://example.com/shop/ {product-name}

我选择将{product-name}转换为PHP中的crc32校验和,并将其存储在产品表中。

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

我的问题

  1. 到目前为止,它在localhost上运行良好。一旦流量增加,这是一个可扩展的解决方案?有什么方法可以测试吗?

  2. 将校验和列索引为Select查询提供帮助吗?

    校验和INT UNIQUE NOT NULL

  3. 我读取insert语句会受到性能影响。但假设插入是偶然的(博客或新产品每周2-3次,也许在3个月内),2-3秒的时间是可以接受的。它有多糟糕?

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

1 个答案:

答案 0 :(得分:1)

  

我正在设计一个带有mysql数据库的小型电子商务网站。我希望保持URL干净,没有任何硬编码的产品ID。

     

给定路径http://example.com/shop/ {product-name}

因此,您的意思是https://example.com/shop/jelly-donuthttps://example.com/shop/coffee。优秀。良好的搜索引擎优化。

  

我选择将{product-name}转换为PHP中的crc32校验和,并将其存储在产品表中。

这种方法有几个问题。

  1. 在如此短的校验和中存在潜在的冲突。多个产品可以轻松映射到相同的校验和。这可能不会发生,直到你早已离开。
  2. 除非您的产品表中有数百万行,否则不需要执行此操作。索引varchar()列上的查找几乎与整数列上的查找一样快。
  3. 这是一个编程麻烦。
  4. 编程完成后很长时间,这是一个维护麻烦。
  5. MySQL(和其他数据库系统)是为了快速查找各种数据而构建的。成千上万的程序员年(真的!)已经开始快速制作这类东西。如果你认为你需要通过一个微不足道的优化改进那些程序员,那么你就错了。当然在这种情况下。
  6.   

    一旦流量增加,这是一个可扩展的解决方案吗?

    是的,它会的。但是查找产品名称也是如此。

      

    将校验和列索引为Select查询提供帮助吗?

    是的,您应该索引SELECT查询中使用的任何列集。索引是一种艺术。检查一下https://use-the-index-luke.com正确索引行少于一百万行的表后,SELECT语句应该快速且可扩展。

    如果你没有正确地索引表,无论你正在查找什么数据类型,你的查询都会非常慢。

      

    我读取insert语句会受到性能影响。

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

      

    将校验和值更好地存储为二进制文件吗?

    如果你使用二进制文件,你将在每个SELECT上节省几十微秒。几十微秒并不重要。

      

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

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

    保持系统简单。不要借用麻烦,尤其是对不同类型数据类型搜索之间差异的想象。