我正在设计一个带有mysql数据库的小型电子商务网站。我想保持URL的清洁,没有任何硬编码的产品id。
因此,给定路径http://example.com/shop/{product}
我选择在PHP中将{ product }转换为crc32校验和,并将其存储在product中。
当收到产品页的请求时,它将转换为crc32校验和,并查询匹配的行。我这样做只是为了产品页面和博客页面。
我的问题
我看过insert语句会受到性能的影响。但假设插入是偶然的(博客或新产品可能每三个月一次,每周2-3次),2-3秒的时间是可以接受的。情况会有多糟?
发布于 2018-01-04 14:05:24
我正在设计一个带有mysql数据库的小型电子商务网站。我想保持URL的清洁,没有任何硬编码的产品id。 因此,给定路径http://example.com/shop/{product}
例如,你指的是https://example.com/shop/jelly-donut
和https://example.com/shop/coffee
。太棒了。很好的搜索引擎优化。
我选择在PHP中将{ product }转换为crc32校验和,并将其存储在product中。
这种方法有几个问题。
varchar()
列的查找速度几乎与整数列的查找速度一样快。一旦流量增加,这会是一个可伸缩的解决方案吗?
是的,会的。但你的产品名称也是如此。
索引校验和列是否有助于选择查询?
是的,应该索引在SELECT查询中使用的任何一组列。索引是一门艺术。一旦正确地索引了少于一百万行的表,请检查这个https://use-the-index-luke.com,SELECT
语句应该是快速的和可伸缩的。
如果没有正确地索引表,则无论查找的数据类型如何,查询都将非常缓慢。
我看过insert语句会受到性能的影响。
一次微不足道的打击。每次插入最多几毫秒。
是否将校验和值存储为二进制更好?
如果使用二进制,则每个选择将节省数十微秒。几十微秒并不重要。
考虑在每个请求之前将校验和转换为二进制的附加任务。
这里唯一重要的是编程和维护时间。
保持你的系统简单。不要借用麻烦,特别是关于不同类型数据类型搜索之间的差异的想象中的麻烦。
https://stackoverflow.com/questions/48096548
复制相似问题