Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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和查询性能_Mysql_Database_Perl - Fatal编程技术网

MySQL和查询性能

MySQL和查询性能,mysql,database,perl,Mysql,Database,Perl,关于查询和perl的最佳实践的问题 在perl for循环中使用select是否有性能或“坏习惯”?向DB发送如此多的选择是否有问题 码是准伪码 @这条线有5000条线 foreach my $elem( @line ){ SQL = SELECT IGNORE INTO <table> ( column1, .. , column 10 ) VALUES ( 'a', .. , 'j' ) } foreach my$elem(@line){ SQL=选择忽略(第1列,…,

关于查询和perl的最佳实践的问题

在perl for循环中使用select是否有性能或“坏习惯”?向DB发送如此多的选择是否有问题

码是准伪码

@这条线有5000条线

foreach my $elem( @line ){
    SQL = SELECT IGNORE INTO <table> ( column1, .. , column 10 ) VALUES ( 'a', .. , 'j' )
}
foreach my$elem(@line){
SQL=选择忽略(第1列,…,第10列)值('a',…,'j')
}
删除和/或更新如何

foreach my $elem( @line ) {
    my $UN = substr($elem, 0, 10 );
    SQL = UPDATE <table> SET <column> = $UN;
}

foreach my $elem( @line ) {
    my $UN = substr($elem, 0, 10 );
    SQL = DELETE from <table> WHERE <column> = $UN
 }
foreach my$elem(@line){
my$UN=substr($elem,0,10);
SQL=更新集=$UN;
}
foreach my$elem(@line){
my$UN=substr($elem,0,10);
SQL=从其中删除=$UN
}
另外,我在同一个竞技场有一个问题,我正在检查5000个项目,我的数据库在任何给定时间都有1到5000个元素。在perl中循环我的5000项并删除数据库中的ID是可以接受的,还是应该在发出delete命令之前先检查ID是否存在

foreach my $elem ( @line ){
    $ID = substr( $elem, 5, 0 );
    SQL = DELETE FROM <table> WHERE id = $ID;
}
foreach my$elem(@line){
$ID=substr($elem,5,0);
SQL=从其中删除id=$id;
}
或者应该是这样的:

foreach my $elem ( @line ){
    $ID = substr( $elem, 5, 0 );
    SQL = DELETE FROM <table> WHERE id = $ID if ID exists;
}
foreach my$elem(@line){
$ID=substr($elem,5,0);
SQL=从其中删除id=$id(如果id存在);
}
谢谢,
--Eherr对数据库的5000次查询不应成为性能瓶颈。你很好。您始终可以对只读运行进行基准测试。

5000个数据库查询不应该成为性能瓶颈。你很好。您始终可以对只读运行进行基准测试。

对于快速连续插入,这不是问题。服务器是为处理这个问题而定制的

但是,出于其他原因,例如程序逻辑应该解决故障,否则将无法解决您刚才忽略的故障,因此插入
ignore
时应小心

至于您显示的特定更新,这在循环中没有意义(或者根本没有意义),因为您没有指定
where
子句。也就是说,为什么要循环1000次,每次都更新all行,因为没有
where
子句?也许那只是你的打字错误

至于删除,通常在循环中也没有问题。如果您希望清空一个表,请查看
截断表
,速度更快,并且如果需要的话,不要记录。请注意,在外键约束情况下,作为引用表的表不允许使用truncate。在这些情况下,有引用表和被引用表的概念

其他一般性意见:应注意确保遵守任何已到位或应到位的引用完整性。由于外键约束,执行insert
ignore
、update或delete操作可能会失败。另外,检查是否存在您无论如何都要删除的行可能会过度使用idk。无论如何,它都在沿着一棵树走去寻找它。为什么要做两次(行军部分)。行军也许不是一个好词,也许是飞行。但在桌上罐头上,这会增加痛苦

最后,当您处于大规模批量插入的情况下,与加载数据填充性能相比,循环在任何编程语言中都无法胜任任务。您的几位同行已经看到,通过使用负载数据(如果您要求,可以参考链接),8到10小时的操作减少到2分钟。Ok是一个

Mysql手册页面如下:

  • 引用完整性
  • 快速清理表与
  • 大批量插入,带有

至于快速连续插入,这不是问题。服务器是为处理这个问题而定制的

但是,出于其他原因,例如程序逻辑应该解决故障,否则将无法解决您刚才忽略的故障,因此插入
ignore
时应小心

至于您显示的特定更新,这在循环中没有意义(或者根本没有意义),因为您没有指定
where
子句。也就是说,为什么要循环1000次,每次都更新all行,因为没有
where
子句?也许那只是你的打字错误

至于删除,通常在循环中也没有问题。如果您希望清空一个表,请查看
截断表
,速度更快,并且如果需要的话,不要记录。请注意,在外键约束情况下,作为引用表的表不允许使用truncate。在这些情况下,有引用表和被引用表的概念

其他一般性意见:应注意确保遵守任何已到位或应到位的引用完整性。由于外键约束,执行insert
ignore
、update或delete操作可能会失败。另外,检查是否存在您无论如何都要删除的行可能会过度使用idk。无论如何,它都在沿着一棵树走去寻找它。为什么要做两次(行军部分)。行军也许不是一个好词,也许是飞行。但在桌上罐头上,这会增加痛苦

最后,当您处于大规模批量插入的情况下,与加载数据填充性能相比,循环在任何编程语言中都无法胜任任务。您的几位同行已经看到,通过使用负载数据(如果您要求,可以参考链接),8到10小时的操作减少到2分钟。Ok是一个

Mysql手册页面如下:

  • 引用完整性
  • 快速清理表与
  • 大批量插入,带有

根据我的意见,进行多个查询有点慢。最好构建一个更新、插入、选择和删除查询并激发

在使用多个查询或单个查询之前,有一些提示

1) 若数据库配置为终止所有需要超过SPCEIfied时间的查询,则usin