Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么MySQL的插入速度这么慢?_Mysql_Optimization - Fatal编程技术网

为什么MySQL的插入速度这么慢?

为什么MySQL的插入速度这么慢?,mysql,optimization,Mysql,Optimization,我在本地主机(笔记本电脑)上有这个表church。当我在上面插入时(它现在有10行),需要160毫秒 church_id在其他表中用作外键 名称和城市id一起应该是唯一的 城市id是一个外键 这不是一个很大的问题吗?我做错什么了吗?插入需要做很多工作: 把桌子锁上 检查唯一索引约束 检查外键约束 创造新纪录 更新索引 打开桌子 写事务日志 @juergend是的,我也这么认为,但索引是否过于复杂或不必要?我已经使用数据库好几年了,但我从来没有考虑过性能,因为它只是为了好玩。。但现在我看到其

我在本地主机(笔记本电脑)上有这个表
church
。当我在上面插入时(它现在有
10行
),需要160毫秒

  • church_id在其他表中用作外键
  • 名称和城市id一起应该是唯一的
  • 城市id是一个外键

这不是一个很大的问题吗?我做错什么了吗?

插入需要做很多工作:

  • 把桌子锁上
  • 检查唯一索引约束
  • 检查外键约束
  • 创造新纪录
  • 更新索引
  • 打开桌子
  • 写事务日志

@juergend是的,我也这么认为,但索引是否过于复杂或不必要?我已经使用数据库好几年了,但我从来没有考虑过性能,因为它只是为了好玩。。但现在我看到其他人抱怨40毫秒!所以我开始想,+1!我有一个AJAX,它插入一行,然后再次为同一行选择,以找到自动生成的ID发送回用户。你知道有没有办法不做选择就获得生成的ID?因为插入只需要160毫秒,我正在寻找提高速度的方法。@学生:使用
mysqli\u INSERT\u ID()
(或者你正在使用的API中的任何等价物)来获得最后一个自动增量ID。如果你在一行中进行大量插入,您可以通过将它们全部放在一个事务中来加快速度。谢谢!我在PDO中快速搜索了一下,但只找到了描述下一个自动增量id的文章。。
CREATE  TABLE IF NOT EXISTS `church` (
  `church_id` INT(11) NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(40) NOT NULL ,
  `city_id` SMALLINT(4) UNSIGNED ZEROFILL NOT NULL ,
  `validated` TINYINT(1) NULL ,
  PRIMARY KEY (`church_id`) ,
  INDEX `church.city_id-city.city_id_idx` (`city_id` ASC) ,
  UNIQUE INDEX `church-city_id` (`name` ASC, `city_id` ASC) ,
  CONSTRAINT `church.city_id-city.city_id`
    FOREIGN KEY (`city_id` )
    REFERENCES `city` (`city_id` )
    ON DELETE RESTRICT
    ON UPDATE RESTRICT)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8