我正在测试探针残差,将数据类型不匹配的表联接起来,以了解这如何影响性能。在此测试中,我连接了两个表,一个表具有不匹配的数据类型(nvarchar与varchar),另一个表具有匹配的数据类型。我使用的代码:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Repositories\PropertyUpload\PropertyUploadRepository;
class FacadesServiceProviders extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('helper', function(PropertyUploadRepositoryInterface $propertyUploadRepository){
return new \App\Helpers\Helper($propertyUploadRepository);
});
}
}
性能存在很大差异。但是,令我完全惊讶的是,使用不匹配的数据类型实际上会更好。
我必须忽略某些东西,但是任何见识都会受到赞赏。
非常感谢!
答案 0 :(得分:0)
INNER JOIN matching type -> NL JOIN CPU time = 15251 ms, elapsed time = 4848 ms. INNER JOIN non-matching type -> MERGE JOIN + SORT CPU time = 15889 ms, elapsed time = 9776 ms.
INNER JOIN matching type -> NL JOIN CPU time = 8438 ms, elapsed time = 9307 ms. INNER JOIN non-matching type -> NL JOIN + sort CPU time = 8687 ms, elapsed time = 10130 ms.
早期版本可能有不同的计划,我希望不匹配的类型获得HASH JOIN和更多的CPU。
p / s Sql Server尝试创建更便宜的计划,以牺牲执行速度为代价来节省资源