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