My method was very similar to himselfe. I just didn't use the rawset or rawdelete methods. Instead I just declared a new table slot on connect, and nulled the slot on part.
Anyway, here's my analysis:
It's not by much, and definitely not noticeable during runtime, but arrays are indexed by an integer while tables are index by a "key" which is usually a string. Iterating through an array is going to be faster than doing so with a table because processing an integer is faster than a string.
However, using the table might be more efficient between the two examples you provided. In the table, you provide a direct reference to the player instance, and can use it without having to use FindPlayer. Again, however, I doubt the performance differences are significant.
But it might be worth noting, that you index the table by player name. I don't recommend this. I would suggest using a player ID. The player name can change during gameplay by either scripting methods or a hack, but the player ID is going to remain the same.