将新行插入SQL数据库

时间:2011-11-13 10:12:40

标签: c# php mysql sql performance

我需要使用C#和php将新记录添加到我的SQL数据库中。我正在使用此代码:

string server = "http://www.naseelco.com/scorm/populatecode.php";
foreach (string code in codeList)//codelist has 200 items
 {
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(server);
     request.Method = "POST";
     string postData = "Code=" + code + "&Active=false";
     byte[] byteArray = Encoding.UTF8.GetBytes(postData);
     request.ContentType = "application/x-www-form-urlencoded";
     request.ContentLength = byteArray.Length;
     try
     {
         Stream dataStream = request.GetRequestStream();
         dataStream.Write(byteArray, 0, byteArray.Length);
         dataStream.Close();
     }
     catch
     {

     }
}

这是populatecode.php文件的内容:

<?php 
$Code = $_POST['Code'];
$Active = $_POST['Active'];
mysql_connect("localhost","myUserName","myPassword") or die ('Error updating database');
mysql_select_db("naseelc1_AC");
mysql_query("INSERT INTO codes (code,Active)VALUES ('$Code','$Active')");
echo $Code;
?>

但是这段代码需要花费太多时间来更新SQL数据库。我的问题是:
是否有更有效的方法在SQL数据库中插入多个记录?

3 个答案:

答案 0 :(得分:3)

分析性能问题的第一件事是测试验证,在那里你会浪费时间,而不是假设它是一个特殊的部分你的系统。

你说“需要花费太多时间来更新SQL数据库”,你怎么知道INSERT会减慢你的速度?

首先,您必须测量系统每个部分的运行时间。然后优化该部分。

如果您不知道要优化哪个部分,请不要启动优化。

使用PHP中的microtime()和C#中的Stopwatch类使用分析器或简单的时间测量代码来计算程序中某个部分的运行时间,以确定热点。

假设你已经完成了所有这些并仍然发现`INSERTìng单行花费的时间太长,那么有几个方面需要探索。索引太多可能是首先要检查的。

看到你的程序,我敢打赌Anders Abel是对的,你在HTTP开销中浪费时间,而不是在INSERT期间

另一种方法是将整个列表发送到PHP代码,然后使用多行INSERT只用一个语句插入所有内容:

  INSERT INTO codes (code,Active)
  VALUES 
  ('code_1', true),
  ('code_2', false),
  ('code_3', true),
  ('code_4', false),
  ('code_5', true)

但是我仍然相信这是你将每个代码作为一个POST发送到后端的概念,这是一直需要的......

答案 1 :(得分:2)

200个后续网络请求的延迟可能是杀死性能的原因。两个建议:

  • 更改php代码以接受完整列表并循环显示它。
  • 在C#代码中使用Parallel.Foreach并行运行请求。

答案 2 :(得分:2)

我知道您没有明确询问安全性,但退出您的用户群!您应该永远不会直接使用$_GET或{{1}您的查询中的变量。你必须先逃避它们。您当前的代码是开放性的。您可以使用$_POST

转义每个字段

请参阅:http://php.net/manual/en/function.mysql-real-escape-string.php

无论如何,要真正回答你的问题,你可能想看看MySQL Connector/NET。它是一个直接连接到MySQL服务器并与标准mysql_real_escape_string()类集成的库。