如何解决如何提高MySQL数据库性能?
我为网络应用程序编写的代码非常小,并且大部分时间仅用于个人使用,因此数据库大小和查询时间从来都不是我的问题。
我使用InnoDB数据库类型是因为我习惯于使用约束(在DELETE CASADE上),因为我排除了许多表中的许多信息并在以后将它们联接。
现在,我创建了一个Web应用程序,每周一次通过CSV文件导入数据。文件大小有时大于1 MB,超过50.000行。
CSV文件来自没有API的旧应用程序。访问数据的唯一方法是将其导出为CSV并将其导入到我的应用中。
我只是通过php将CSV上传到服务器,并使用php将数据逐行添加到我的MySQL数据库中。详细地说,我要遍历文件的每一行并执行“ INSERT INTO”查询。因此,我在创建行和达到数据库内存限制(默认值)时会花很多时间。增大限制的感觉就像是在做错事,并且也导致了较长的查询时间。
我该怎么做才能提高数据库性能?
编辑:它不能直接将CSV加载到MySQL,因为我需要将内容拆分到不同的表中。
例如:CSV的列中包含types
。我创建了一个types
表,并将值添加到该表中,并且在主表中仅添加了ID。因此,以后我在php中具有更大的灵活性,因为我不需要处理值名称。我可以使用id。
另外,我做类似“如果数字以XY开头,则将值Z添加到mysql表中的特定列”之类的事情
解决方法
如果文件中有数据,请使用load data infile
。这将比每次插入一行数据快得多。请注意,需要在运行MySQL的服务器上访问该文件。在个人应用程序(大概在单台计算机上运行)上,这应该不是问题。
我也可能建议将数据加载到登台表中。然后从该表插入最终表。这样可以更轻松地处理传入数据中的任何毛刺。
,如果您需要在插入之前在php应用程序中处理数据。您可以将一个多行的INSERT语句组合在一起,这在MySQL中比每行一个INSERT语句快得多。
$data = array(
array(
'title' => 'My title','name' => 'My Name','date' => 'My date'
),array(
'title' => 'Another title','name' => 'Another Name','date' => 'Another date'
)
);
$this->db->insert_batch('mytable',$data);
// Produces: INSERT INTO mytable (title,name,date) VALUES ('My title','My name','My date'),('Another title','Another name','Another date')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。