2011-12-07 53 views
2

我有两个sql文件:第一个创建数据库,表和存储过程。第二个用90000个条目填充创建的表。sql执行不正确

创建sql文件共创建1个数据库,26个表和104个存储过程。 填充sql文件添加90000个条目。

由于某种原因,当我执行创建文件时,它每次都能很好地工作。

当我执行填充文件时,它工作的一半。它占据了一半的桌子,另一半将保持空着。我注意到,如果我在执行创建文件后大约2分钟后等待,然后尝试执行填充文件,那么它完美工作。为什么这样做?没有办法快速填充表格而无需等待?

我使用的是最新版本的mysql,我尝试通过phpmyadming执行填充文件的内容,并且获得了相同的结果。

+0

这听起来好像有东西在你的表上的锁。你在使用交易吗?在插入文件中,检查哪个表正在插入并发布用于创建该表的sql。 –

+0

@AshBurlaczenko我没有使用任何交易。我通过简单地插入数据来插入数据,这是一个较小插入的例子'INSERT INTO faults('id','faults_name')VALUES(1,'name');'问题是只有table被我插入1000多个条目在没有2分钟冷却的情况下无法工作,我尝试将插入量减少到更小,并且它工作正常。表格本身也不是特别的,每个表格最多包含7列。 – Quillion

+0

你有错误信息吗?是否配置了可以在后台线程中设置的任何类型的镜像? –

回答

1

我必须假设创建数据库和表的文件也创建PRIMARY KEYSIndexes。你有没有考虑过拆分文件成:

  1. 创建数据库和表
  2. 加载数据
  3. 创建主键和索引
  4. 创建存储过程。

由于还建议尝试增加bulk_insert_buffer_size并从单一查询更改你插入的方式张贴到:

INSERT INTO faults(id, fault_name) VALUES (...), (...) ... 
+1

+1,如果在批量插入之后要执行键和索引*,则OP可以从运行CHECK获益。 http://dev.mysql.com/doc/refman/5.0/en/check-table.html – Matthew

+0

哦,哇,这真是令人惊叹!它工作完美。这个程序怎么没有引起任何问题?也非常感谢@MatthewPK CHECK技巧也非常方便!非常感谢你们,这是一个救生员。 – Quillion

+0

@Quillion当您插入时必须更新索引和主键(这也是一个索引)的事实可能会导致这种情况发生。看看[INSERT SPEED](http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html),它会提供更多细节。事实上,创建索引总是更有优势,因为它们占用的存储空间更少 – Karlson