PHP: MySQL вставляет данные очень медленно - PullRequest
0 голосов
/ 19 ноября 2018

Я использую ниже класс для вставки данных:

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;
  }
}

А это мой стол:

enter image description here

А это мой код:

$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 являются индексами Почему?

1 Ответ

0 голосов
/ 20 ноября 2018

Попробуйте вставить записи в связки.Это не приведет к таймауту.Попробуйте разделить ваши записи, чтобы получить 100 вставок за звонок.Поскольку у вас есть индексы, связанные со столбцами, очевидно, что для вставки требуется время.Большое количество индексов влияет на производительность вставки в БД.Поэтому выбирайте индексы с умом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...