我正在创建一个网站,可以让用户通过Facebook登录,当用户登录时,我的数据库会存储他/她从Facebook获取的信息。
创建表的SQL代码是:
CREATE TABLE facebook_users (
user_id BIGINT NOT NULL,
username varchar(255),
firstname varchar(255),
lastname varchar(255),
email varchar(255),
PRIMARY KEY (user_id)
)
facebook提供的一行信息的例子是:
user_id: 241123463541244
username: John Smith
firstname: John
lastname: Smith
email: johnsmith1977@gmail.com
每次用户登录时,我的网站都会检查该user_id是否已存在行,如果没有,则会创建该行并插入相应的信息:
$user_id = 241123463541244;//obtained from facebook via the access_token
$sqlStatement = "SELECT EXISTS(SELECT 1 FROM table1 WHERE user_id = ".$user_id.")";
$sqlStatementPrepared = $conn->prepare($sqlStatement);
$sqlStatementPrepared->execute();
$row = $sqlStatementPrepared->fetch();
if ($row === false)
{
//code that inserts a new row into the facebook_users table
}
我担心的是,当数据库增长到超过100万行(或1000万行等)时,当前的user_id会导致未来查询出现速度问题,特别是考虑到新的facebook会一个接一个地创建行用户第一次登录,这意味着user_id值不是递增或递减的顺序。
问题:当数据库增长到超过100万行时,当前的MySQL格式是否会导致未来查询的速度问题?如果是这样,我可以使用更好的方法来提高性能吗?