我有一张这样的桌子:

  `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/

10-12 05:38