【问题标题】:PHP: mysqli insert data is very slowPHP:mysqli插入数据很慢
【发布时间】:2018-11-19 20:44:05
【问题描述】:

我使用下面的类来插入数据:

class DB {
  protected static $connection;
    public $num = 0;
    public $insertID = 0;
    public $data = "";
    public $select = "";
    public $error = "";

  public function connect() {
    if(!isset(self::$connection)) {
      self::$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
      mysqli_query(self::$connection, "SET NAMES 'utf8'");
    }

    if(self::$connection === false) {
      echo 'Not Connect To Database !<br>'.self::$connection->connect_error;
      return false;
    }

    return self::$connection;
  }

  public function query($query) {
    $this->select = $query;
    $q = $this->connect()->query($query);
    $this->connect()->commit();

    return $q;
  }

public function insert($table, $params){
    $before = $after = '';

    foreach($params as $field => $value){
        $before .= "`$field`,";
        $after .= "'$value',";
    }

    $before = substr($before,0,-1);
    $after = substr($after,0,-1);

    $sql = "INSERT INTO `$table` ($before) VALUES ($after)";
    if($this->query($sql)){
        $this->insertID = mysqli_insert_id($this->connect());
    }

    return true;
  }
}

这是我的桌子:

这是我的代码:

$array = array( 'basketPrice'=>$detail['price'],
                    'basketOrder'=>$orderId,
                    'basketGift'=>$userGift,
                    'basketUseCredit'=>$cr,
                    'basketProduct'=>$product,
                    'basketFinish'=>$detail['buyPrice'],
                    'basketExSoon'=>$detail['minus']);

$db = new DB();
$db->insert('basket', $array);

在我的数据库中保存大约 80.000 条记录。运行代码后,我超时并插入表中不起作用

basketId、basetGift 和 basketOrder 是索引 为什么?

【问题讨论】:

    标签: php mysqli indexing


    【解决方案1】:

    尝试成串插入记录。这不会导致超时。尝试将您的记录拆分为每次调用 100 次插入。由于您有与列关联的索引,因此很明显为什么插入需要时间。拥有大量索引会影响数据库中插入的性能。所以要明智地选择索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 2013-08-03
      • 1970-01-01
      • 2017-06-03
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多