为了账号安全,请及时绑定邮箱和手机立即绑定

如何提高 MySQL 数据库性能?

如何提高 MySQL 数据库性能?

PHP
子衿沉夜 2023-10-01 15:49:43
我编写的网络应用程序规模非常小,大部分时间仅供个人使用,因此数据库大小和查询时间对我来说从来都不是问题。我使用 InnoDB 数据库类型,因为我习惯使用约束(ON DELETE CASADE),因为我排除了许多表中的许多信息并稍后将它们连接起来。现在,我创建了一个 Web 应用程序,每周通过 CSV 文件导入一次数据。文件大小有时大于 1 MB,行数超过 50.000。CSV 文件来自没有 API 的旧应用程序。访问数据的唯一方法是将其导出为 CSV 并将其导入到我的应用程序中。我只是通过 php 将 CSV 上传到服务器,然后使用 php 将数据逐行添加到我的 MySQL 数据库中。详细来说,我将遍历文件的每一行并执行“INSERT INTO”查询。因此,我在创建行和达到数据库内存限制(默认值)时遇到了很大的加载时间。增加限制感觉就像做错了什么,并且也会导致查询时间过长。我可以做什么来提高数据库的性能?编辑:它不能直接将 CSV 加载到 MySQL,因为我需要将内容拆分到不同的表中。例如:CSV 有一个带有types. 我创建了一个types表并将值添加到该表中,在主表中我只添加了 id。这样我以后在 php 中就有了更多的灵活性,因为我不需要处理值名称。我只能用 ids 来工作。另外,我做了类似“如果数字以 XY 开头,则将值 Z 添加到 mysql 表中的特定列”之类的操作
查看完整描述

2 回答

?
杨魅力

TA贡献1811条经验 获得超5个赞

如果文件中有数据,请使用load data infile. 这比一次插入一行数据要快得多。请注意,该文件需要在运行 MySQL 的服务器上可访问。对于个人应用程序(可能在单台计算机上运行),这不应该是问题。

我可能还建议将数据加载到临时表中。然后从该表插入最终表。这使得处理传入数据中的任何故障变得更加简单。


查看完整回答
反对 回复 2023-10-01
?
达令说

TA贡献1821条经验 获得超6个赞

如果您需要在插入之前在 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')



查看完整回答
反对 回复 2023-10-01
  • 2 回答
  • 0 关注
  • 59 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信