Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/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
将传输到MySQL的PHP PDO网络传输数据降至最低_Php_Mysql_Pdo - Fatal编程技术网

将传输到MySQL的PHP PDO网络传输数据降至最低

将传输到MySQL的PHP PDO网络传输数据降至最低,php,mysql,pdo,Php,Mysql,Pdo,假设目标表如下所示: CREATE TABLE mysql_mytable ( myint INT, mytinyint TINYINT, mydecimal DECIMAL(10,2), mydatetime DATETIME, mydate DATE ) 以下代码包含多个测试用例: $mysql_pdo = new PDO("mysql:...", ..., [ PDO::ATTR_PERSISTENT => true

假设目标表如下所示:

CREATE TABLE mysql_mytable (
    myint INT, 
    mytinyint TINYINT, 
    mydecimal DECIMAL(10,2), 
    mydatetime DATETIME, mydate DATE
)
以下代码包含多个测试用例:

$mysql_pdo = new PDO("mysql:...", ..., [
    PDO::ATTR_PERSISTENT => true, 
    PDO::ATTR_ERRMODE    => PDO::ERRMODE_EXCEPTION
]);
foreach ([
    'myint' => [
        'a' => [PDO::PARAM_STR, "1048575"],
        'b' => [PDO::PARAM_STR, 1048575],//same as previous?
        'c' => [PDO::PARAM_STR, dechex(1048575), 'UNHEX(?)'],//"FFFFF"
        'e' => [PDO::PARAM_INT, 1048575],//fewest as 4 byte int?
        'f' => [PDO::PARAM_INT, "1048575"],//same as previous?
    ],
    'mytinyint' => [
        'a' => [PDO::PARAM_STR, "255"],
        'b' => [PDO::PARAM_STR, 255],//same as previous?
        'c' => [PDO::PARAM_STR, dechex(255), 'UNHEX(?)'],//"FF" fewest bytes as VARCHAR?
        'e' => [PDO::PARAM_INT, 255],
        'f' => [PDO::PARAM_INT, "255"],//same as previous?
    ],
    'mydecimal' => [//PDO::PARAM_INT cannot be used correctly for decimals?
        'a' => [PDO::PARAM_STR, "32000000.00"],
        'b' => [PDO::PARAM_STR, "3.2e7"],//fewest bytes as VARCHAR?
    ],
    'mydatetime' => [
        'a' => [PDO::PARAM_STR, "2021-05-10 09:09:39"],
        'c' => [PDO::PARAM_STR, strtotime("2021-05-10 09:09:39")],
        'd' => [PDO::PARAM_INT, strtotime("2021-05-10 09:09:39")],//fewest as 4 byte int?
    ],
    'mydate' => [
        'a' => [PDO::PARAM_STR, "2021-05-10"],
        'c' => [PDO::PARAM_STR, strtotime("2021-05-10")],
        'd' => [PDO::PARAM_INT, strtotime("2021-05-10")],//fewest as 4 byte int?
    ]
] as $col => $tests) {
    foreach ($tests as $case_label => $test) {
        list($type, $value) = $test;
        $mark = isset($test[2]) ? $test[2] : '?';
        $stmt = $mysql_pdo->prepare('INSERT INTO mysql_mytable ({$col}) VALUES ({$mark})');
        $stmt->bindValue(1, $value, $type);
        $stmt->execute();
    }
}
我花了很多时间优化表上使用的磁盘空间,但是有大量数据流向非本地MySQL实例。有许多列和许多行。。。以上只是为了显示…中的某些组和选项。。。这真的是导入-是的,我正在考虑如何使插入在禁用密钥检查、索引等的therms中有效。我用示例代码重复这个示例,我请求帮助最小化发送到远程MySQL实例的数据量。。。是的,这是一个巨大的数据量,是的,连接速度足够慢,处理时间非常关键,这很重要

根据列/测试组,哪一个将导致通过网络传输到MySQL数据库的字节数最少


是否有任何方法可以限制数据以不同的方式使用PDO或根本不使用PDO?

整数比字符串中的等效值更紧凑,无论它是十进制还是十六进制

十进制值1048575需要7个字符,十六进制值FFFFF需要5个字符。而整数只使用4个字节

还考虑是否启用了PDO::启用TraceFrimeTyApReavar。这将阻止整数参数的使用,因为字符串值将被插值到查询字符串中,而不是作为实参数单独发送


就我自己而言,我并不关心简单数据类型的网络传输。网络速度足够快,与查询执行时间相比,传输时间可以忽略不计。如果您正在传输大的BLOB/文本内容,或者正在批量加载数百万行,但是通常单个整数的4字节和5-8字节之间的差异不会解决任何性能瓶颈。

您是在尝试优化网络传输还是优化存储?数据最终将转换为表定义中的数据类型,而不考虑通过网络传输的格式。@BillKarwin network transfer。存储使用有很好的记录,但是,如果字符串是2个字符,我只能假设它是INT或字符串。您可能在这里进行的任何先发制人的微优化都远没有在循环内部而不是之前不必要地调用prepare这个事实重要。@Sammitch这不是生产代码,唯一重要的是几位每列通过网络发送。它在生产中肯定不会这样做。最后一段是的。除非您现在在严重的网络限制下运行,否则您将需要对存储进行更多的优化,而不是从网络传输中减少几个字节。是的,我正在通过一个糟糕的internet连接批量加载数百万行—我完全知道还有其他技术会产生影响,并且正在对Too进行操作,所以您建议我使用PDO::ATTR_EMULATE_构造/设置PDO准备为真还是假?如果文档强制使用字符串或不强制使用字符串,则会造成混乱……我建议将其设置为false,因为如果为true,则参数值将作为SQL查询字符串的一部分生成字符串。