插入时更快的MySQL查询

时间:2019-04-18 15:07:44

标签: php mysql sql

我正在作为一个有趣的网站项目在社交网站上工作,目的只是为了提高我的技能。我将所有数据保存在mysql数据库中。

当我创建完整的帐户记录(使用帖子,关注者等创建它们)时,我遇到了非常糟糕的表现。这样做的原因,至少在我看来,是我对数据库进行了大量查询。 我总是首先进行查询以检查是否存在任何类型或表的行,然后通过插入创建它。

首先,还有更好的方法吗? 其次,您是否认为性能不佳(大约2秒)的主要原因是因为我没有发送所有查询;立即分离到服务器。

很抱歉,如果这是一个基本问题。 我之所以这么问,是因为在我以前的一个项目中,我在几秒钟甚至更快的时间内创建了数千个项目实体(消费品)。

这是代码。我使用的是我自己写的sql lib,insert()函数只是进行基本的插入调用,而update()是基本的更新调用。 sql lib可以完美运行。

function create_account($account) {
    if (!$account instanceof Account) {
        throw new Invalid_Parameter_Exception('parameters with invalid type.');
    }
    if (!account_exists($account->id)) {

        $basic_account = new Basic_Account($account->id, $account->username, $account->name);
        create_empty_account($basic_account);
    }

    $general_data['username'] = $account->username;
    $general_data['name'] = $account->name;
    if (!is_null($account->website)) {$general_data['website'] = $account->website;}
    if (!is_null($account->bio)) {$general_data['bio'] = $account->bio;}
    $general_data['profile_photo_url'] = $account->profile_photo_url;
    $general_data['private'] = $account->is_private;
    $general_data['verified'] = $account->is_verified;
    $general_data['business_account'] = $account->is_business_account;
    $general_data['joined_recently'] = $account->joined_recently;
    $general_data['last_update'] = $account->last_update;

    update(DATABASE, ACCOUNTS_TABLE, $general_data, 'id', $account->id);

    //followers
    $account_following_data['last_update'] = date('Y-m-d G:i:s');

    foreach($account->followers as $follower) {
        if(!account_exists($follower->id)) {
            create_empty_account($follower);
        }

        if (!account_following_entry_exists($follower->id, $account->id)) {
            $account_following_data['account_id'] = $follower->id;
            $account_following_data['account_id_following'] = $account->id;

            insert(DATABASE, ACCOUNT_FOLLOWING_TABLE, $account_following_data);
        }
    }

    //followings
    $account_following_data['last_update'] = date('Y-m-d G:i:s');

    foreach($account->following as $followed_user) {

        if(!account_exists($followed_user->id)) {
            create_empty_account($followed_user);
        }

        if (!account_following_entry_exists($account->id, $follower->id)) {
            $account_following_data['account_id'] = $account->id;
            $account_following_data['account_id_following'] = $follower->id;

            insert(DATABASE, ACCOUNT_FOLLOWING_TABLE, $account_following_data);
        }
    }

    //posts
    foreach($account->posts as $post) {
        create_post($post);
    }
    //tagged posts
    foreach($account->tagged_posts as $post) {
        create_post($post);
    }
}

0 个答案:

没有答案