(MYSQL)检查ID是否已存在的性能(例如,在Poll选民表中)

时间:2015-07-21 17:43:31

标签: mysql sql select

我想知道哪些是最好的,当我想检查某人是否已经参加过会员相关活动(如投票)

想象一下,我有存储所有选民投票的表。随着时间的推移,它可以达到一个非常大的规模(500多个条目/票数500个不同的民意调查)。

当我想检查一位会员是否已经投票给我的新民意调查时,最好的是什么? :

1 /在" 10000+条目VOTERS表" 上设置 SELECT或COUNT 以查看所述USERID是否已投票给我的新民意调查

2 /在我的POLL_main_infos表中有 TEXT列,其中i stock / CONCAT USERIDS ,如下所示:

" 1,15,42,12,523,8521,7444等等"

要检查,我将这些列作为变量然后在我的PHP脚本中,我使用REGEX检查其中是否已存在USERID(如查找",42,",意味着具有ID" 42"的用户已参与该投票。

另外,如果第二种解决方案是最好的,我应该在文本列或BLOB中存储IDS吗?

无论如何,非常感谢你提前!

2 个答案:

答案 0 :(得分:2)

在关系数据库系统中,通常最好存储规范化的数据,因此不存在用户ID列表。

所以使用Holmes IV建议的表格很简单:

SELECT 'User already voted' 
WHERE EXISTS
 (
  SELECT * FROM Participation
   WHERE PollId = 123
     AND UserId = 456
 )

使用适当的索引(如果用户可能每次投票仅投票一次,则为UNIQUE索引),无论行数如何,这都将非常快。

答案 1 :(得分:0)

你对这有多大的自由?我会说你需要3张桌子,每张1张:民意调查,选民,参与。在Poll表中,存储Poll_ID和Poll_Description。在选民中,您可以存储所有Voter_ID以及您可能拥有的任何其他选民信息。然后在参与中存储,Poll_ID,Voter_ID和结果,或者只是他们参与的日期。然后,当您想要查看此类信息时,您可以查询第3个表,并将其连接到另一个表中

检查用户是否已投票的最佳方法是查询您的设置中的Polls_Voters表格

Select *
from Polls_Voters
where Voter_ID = 'ID of voter you are looking for'
and poll_id = 'ID of poll you wish to see if they voted in'