【发布时间】:2014-06-22 11:02:09
【问题描述】:
我正在 php/mysql 中构建一个简单的投票、唯一查看器、唯一下载计数等功能,我有一个关于性能的问题:
由于对这个小型系统采取了许多行动,我想知道这方面的最佳实践是什么,使用多个 INT 列或 1 个单一 VARCHAR 列,当然在性能方面:
$uniqueid= STRING generated from system (ip, cookies Etc)
$contentid = INT ID on primary key of content table
$contenttype = INT 0-n ( comment = 0, poll = 1, filedownload = 2 Etc).
$action = INT 0-n ( vote = 0, view = 1, download = 2 Etc)
SELECT *
FROM `table`
WHERE `uid` = '$uniqueid' AND `cid` = '$contentid' AND `ct` = '$contenttype' AND `action` = '$action' ;
或者这个:
$key = "$uniqueid-$contentid-$contenttype-$action";
SELECT *
FROM `table`
WHERE `key` = '$key';
【问题讨论】:
-
这似乎是过早优化的一个例子。没有理由不对具有多种类型的四种不同属性使用四列。您应该采用该解决方案,除非您有非常具体且晦涩难懂的性能要求。
-
正如 Gordon 所说,没有必要让事情复杂化。 MySQL 应该能够轻松地查找 1M+ 行/秒。最好的优化不是优化,在你意识到需要优化之前不要担心。无论如何,像第二种情况那样存储数据将是以后的噩梦。
-
刚刚添加了一个答案,但总的来说,从结构的角度来看,第一个示例最有意义。代码上线后,任何性能调整都可能发生在 MySQL 服务器上。事实上,真正微调服务器的唯一方法是在实时环境中处理真实流量。这意味着计划在初始发布期间进行调整和调整。
-
您好,感谢您的快速回复。是的,这是一个典型的过早优化,我知道 :) 我在选择术语时也有错,对于这个不完整的例子来说,性能是一个雄心勃勃的词。在开发过程中,性能包括以最有效方式发挥作用的大量流程和组件。正确的术语是速度,只是查询索引 VARCHAR 与 INT 的速度差异。无论如何,由于我的“小”项目发生了一些变化,更合理的解决方案是使用多个 INT 列。在未来的功能上更可重用,我在 mysql 集群上不再有这个“问题”了。
标签: php mysql sql performance