MySQL和查询性能
关于查询和perl的最佳实践的问题 在perl for循环中使用select是否有性能或“坏习惯”?向DB发送如此多的选择是否有问题 码是准伪码 @这条线有5000条线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列,…,
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。在这些情况下,有引用表和被引用表的概念
其他一般性意见:应注意确保遵守任何已到位或应到位的引用完整性。由于外键约束,执行insertignore
、update或delete操作可能会失败。另外,检查是否存在您无论如何都要删除的行可能会过度使用idk。无论如何,它都在沿着一棵树走去寻找它。为什么要做两次(行军部分)。行军也许不是一个好词,也许是飞行。但在桌上罐头上,这会增加痛苦
最后,当您处于大规模批量插入的情况下,与加载数据填充性能相比,循环在任何编程语言中都无法胜任任务。您的几位同行已经看到,通过使用负载数据(如果您要求,可以参考链接),8到10小时的操作减少到2分钟。Ok是一个
Mysql手册页面如下:
- 引用完整性
- 快速清理表与
- 大批量插入,带有
ignore
时应小心
至于您显示的特定更新,这在循环中没有意义(或者根本没有意义),因为您没有指定where
子句。也就是说,为什么要循环1000次,每次都更新all行,因为没有where
子句?也许那只是你的打字错误
至于删除,通常在循环中也没有问题。如果您希望清空一个表,请查看截断表
,速度更快,并且如果需要的话,不要记录。请注意,在外键约束情况下,作为引用表的表不允许使用truncate。在这些情况下,有引用表和被引用表的概念
其他一般性意见:应注意确保遵守任何已到位或应到位的引用完整性。由于外键约束,执行insertignore
、update或delete操作可能会失败。另外,检查是否存在您无论如何都要删除的行可能会过度使用idk。无论如何,它都在沿着一棵树走去寻找它。为什么要做两次(行军部分)。行军也许不是一个好词,也许是飞行。但在桌上罐头上,这会增加痛苦
最后,当您处于大规模批量插入的情况下,与加载数据填充性能相比,循环在任何编程语言中都无法胜任任务。您的几位同行已经看到,通过使用负载数据(如果您要求,可以参考链接),8到10小时的操作减少到2分钟。Ok是一个
Mysql手册页面如下:
- 引用完整性
- 快速清理表与
- 大批量插入,带有