Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 优化MySQL的XML解析性能_Php_Mysql_Xml_Performance_Indices - Fatal编程技术网

Php 优化MySQL的XML解析性能

Php 优化MySQL的XML解析性能,php,mysql,xml,performance,indices,Php,Mysql,Xml,Performance,Indices,我正在做一个项目来减少页面的加载时间。运行的PHP脚本建立到数据库的连接。然后它接收一个XML文件,并将每个元素存储在一个变量中。然后运行一个查询来检查“成员ID”是否存在,如果不存在,则在一个很长的INSERT语句(20列)中插入XML中的所有数据。该过程对同一数据库上的不同表重复第二次,如果已经存在,则更新,如果未找到,则插入 什么是加速这些查询或优化它们以使它们运行得更快的最佳方法?我目前正在研究使用索引,但我不确定它们如何工作或如何实现。任何想法都会有帮助 谢谢 下面是一些示例代码: $

我正在做一个项目来减少页面的加载时间。运行的PHP脚本建立到数据库的连接。然后它接收一个XML文件,并将每个元素存储在一个变量中。然后运行一个查询来检查“成员ID”是否存在,如果不存在,则在一个很长的INSERT语句(20列)中插入XML中的所有数据。该过程对同一数据库上的不同表重复第二次,如果已经存在,则更新,如果未找到,则插入

什么是加速这些查询或优化它们以使它们运行得更快的最佳方法?我目前正在研究使用索引,但我不确定它们如何工作或如何实现。任何想法都会有帮助

谢谢

下面是一些示例代码:

$partner_insert  = "INSERT INTO `keystore`.`partners` SET ";
$partner_insert .= "`ma_id`='1', `partner_name`='".$member_name."', `partner_email`='".$member_name."', ";
$partner_insert .= "`member_id`='".$member_id."', ";
$partner_insert .= "`member_billingname`='".$member_billingname."', `member_billingconfirstname`='".$member_billingconfirstname."', ";
$partner_insert .= "`member_billingconlastname`='".$member_billingconlastname."', `member_billingcurrency`='".$member_billingcurrency."', ";
$partner_insert .= "`member_billingaddress`='".$member_billingaddress."', `member_billingcity`='".$member_billingcity."', ";
$partner_insert .= "`member_billingcountry`='".$member_billingcountry."', `member_billingzipcode`='".$member_billingzipcode."', ";
$partner_insert .= "`member_billingstate`='".$member_billingstate."', `member_billingstatecode`='".$member_billingstatecode."', ";
$partner_insert .= "`member_billingprimaryemail`='".$member_billingprimaryemail."', `member_billingprimaryphone`='".$member_billingprimaryphone."', ";
$partner_insert .= "`member_billingsecondaryphone`='".$member_billingsecondaryphone."', `last_action_by`='".$ndp_id."', ";
$partner_insert .= "`last_action_date`=NOW(), `last_action`='Create'"

多个插入将很慢。听起来好像你可以批量插入,一次完成数百个。如果执行此操作,则可以使用ON replice KEY UPDATE语法根据行是否存在执行插入或更新

对实际数据进行大量猜测(例如,决定是否要更新而不是插入重复数据的关键是什么),如下所示:-

<?php

$insert_array = array();

foreach($members as $member)
{
    if (count($insert_array) > 250)
    {
        $db->query("INSERT INTO keystone.partners (member_name, member_id, member_billingname, member_billingconfirstname, member_billingconlastname, member_billingcurrency, member_billingaddress, member_billingcity, member_billingcountry, member_billingzipcode, member_billingstate, member_billingstatecode, member_billingprimaryemail, member_billingprimaryphone, member_billingsecondaryphone, ndp_id)".
                    implode(",", $insert_array).
                    "ON DUPLICATE KEY UPDATE member_name=VALUES(member_name),  member_billingname=VALUES(member_billingname), member_billingconfirstname=VALUES(member_billingconfirstname), member_billingconlastname=VALUES(member_billingconlastname), member_billingcurrency=VALUES(member_billingcurrency), member_billingaddress=VALUES(member_billingaddress), member_billingcity=VALUES(member_billingcity), member_billingcountry=VALUES(member_billingcountry), member_billingzipcode=VALUES(member_billingzipcode), member_billingstate=VALUES(member_billingstate), member_billingstatecode=VALUES(member_billingstatecode), member_billingprimaryemail=VALUES(member_billingprimaryemail), member_billingprimaryphone=VALUES(member_billingprimaryphone), member_billingsecondaryphone=VALUES(member_billingsecondaryphone), ndp_id=VALUES(ndp_id)");
    $insert_array = array();
    }
    $member_name                    = $db->real_escape_string($member['member_name']);
    $member_id                      = (int)$member['member_id'];
    $member_billingname             = $db->real_escape_string($member['member_billingname']);
    $member_billingconfirstname     = $db->real_escape_string($member['member_billingconfirstname']);
    $member_billingconlastname      = $db->real_escape_string($member['member_billingconlastname']);
    $member_billingcurrency         = $db->real_escape_string($member['member_billingcurrency']);
    $member_billingaddress          = $db->real_escape_string($member['member_billingaddress']);
    $member_billingcity             = $db->real_escape_string($member['member_billingcity']);
    $member_billingcountry          = $db->real_escape_string($member['member_billingcountry']);
    $member_billingzipcode          = $db->real_escape_string($member['member_billingzipcode']);
    $member_billingstate            = $db->real_escape_string($member['member_billingstate']);
    $member_billingstatecode        = $db->real_escape_string($member['member_billingstatecode']);
    $member_billingprimaryemail     = $db->real_escape_string($member['member_billingprimaryemail']);
    $member_billingprimaryphone     = $db->real_escape_string($member['member_billingprimaryphone']);
    $member_billingsecondaryphone   = $db->real_escape_string($member['member_billingsecondaryphone']);
    $ndp_id                         = (int)$member['ndp_id'];
    $insert_array[] =   "('$member_name', $member_id','$member_billingname','$member_billingconfirstname','$member_billingconlastname','$member_billingcurrency','$member_billingaddress','$member_billingcity','$member_billingcountry','$member_billingzipcode','$member_billingstate','$member_billingstatecode','$member_billingprimaryemail','$member_billingprimaryphone','$member_billingsecondaryphone',$ndp_id)";
}

$db->query("INSERT INTO keystone.partners (member_name, member_id, member_billingname, member_billingconfirstname, member_billingconlastname, member_billingcurrency, member_billingaddress, member_billingcity, member_billingcountry, member_billingzipcode, member_billingstate, member_billingstatecode, member_billingprimaryemail, member_billingprimaryphone, member_billingsecondaryphone, ndp_id)".
            implode(",", $insert_array).
            "ON DUPLICATE KEY UPDATE member_name=VALUES(member_name),  member_billingname=VALUES(member_billingname), member_billingconfirstname=VALUES(member_billingconfirstname), member_billingconlastname=VALUES(member_billingconlastname), member_billingcurrency=VALUES(member_billingcurrency), member_billingaddress=VALUES(member_billingaddress), member_billingcity=VALUES(member_billingcity), member_billingcountry=VALUES(member_billingcountry), member_billingzipcode=VALUES(member_billingzipcode), member_billingstate=VALUES(member_billingstate), member_billingstatecode=VALUES(member_billingstatecode), member_billingprimaryemail=VALUES(member_billingprimaryemail), member_billingprimaryphone=VALUES(member_billingprimaryphone), member_billingsecondaryphone=VALUES(member_billingsecondaryphone), ndp_id=VALUES(ndp_id)");

?>

在这里提供一些示例代码。@AkshayPaghdar更新了帖子。表中的数据有多大?您是否尝试分析脚本以了解代码的哪些部分需要更多时间?!我猜应该是xml解析。另外,您使用的列类型是什么?!你能发布表格模式吗?如果您的写入速率很高,那么将索引应用于表实际上会降低速度@MosabAhmad如何分析脚本?这将是一系列关于PHP调试和分析的优秀文章: