我有一张这样的桌子:
`id` int(11) NOT NULL AUTO_INCREMENT,
`torderid` int(11) DEFAULT NULL,
`tuid` int(11) DEFAULT NULL,
`tcontid` int(11) DEFAULT NULL,
`tstatus` varchar(10) DEFAULT 'pending',
这里的规则是,同一用户UID不能有多个具有相同竞争条件的挂起订单。
所以我要做的第一件事就是检查是否有这样的待处理订单:
select count(id) into @cnt from tblorders where tuid = 1 and tcontid=5 and tstatus like 'pending';
如果大于0,则无法插入。
或者我可以为这三列创建一个唯一索引,这样该表将不会接受重复项的新记录。
问题是:
哪种方式更快?因为那将是一个大型数据库...
最佳答案
很少的建议。
使用tstatus = 'pending';
代替tstatus like 'pending';
如果仅考虑“待定”状态,则无法为tid, tcontid, tstatus
创建复合主键。那么其他状态呢?
如果决定为列建立索引,建议您为tstatus
创建一个单独的表,并在此处使用外键引用。因此,它将节省索引列的空间,并且您的查询将始终在索引字段上运行。
关于mysql - 哪个更好:选择重复项检查或创建唯一索引?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15074667/