Hi,

This is again about new translator. Seems like I was too optimistic
unifying SQLServer and Sybase adapters.
This RTRIM() behavior is from SQLServer and I wonder if it will cause
performance issues there too.

On Thu, May 2, 2019 at 3:54 AM Lon Varscsak <lon.varsc...@gmail.com> wrote:

> Hey all,
>
> I'm working to integrate 4.2 into my code base and I've run into a snag.
> It appears that some queries are slower and what I'm finding is that when I
> have CHAR columns, that it ends up doing a join that is RTRIM(column) =
> RTRIM(other column).  This results in the query optimizer not using an
> index (because it has to rtrim all values before comparison).
>
> Here is an example from a disjointed prefetch:
>
> 4.1.B2-SNAPSHOT: 👍
>
> SELECT DISTINCT [t0].[average_cost], [t0].[backorder_flag],
> [t0].[break_match_code], [t0].[case_location], [t0].[case_qty],
> [t0].[category_code], [t0].[cgs_gl_account], [t0].[charges_group_code],
> [t0].[composition_family], [t0].[composition_output_definition],
> [t0].[custom_vendor], [t0].[description], [t0].[drop_ship_code],
> [t0].[duties_percent], [t0].[duties_tax_cost_percent],
> [t0].[envelope_item_number], [t0].[expect_date], [t0].[first_sale_date],
> [t0].[freight_cost_percent], [t0].[inventory_gl_account], [t0].[lead_time],
> [t0].[license_required], [t0].[market], [t0].[material],
> [t0].[merchandise_cost_percent], [t0].[operator_message], [t0].[origin],
> [t0].[part_number], [t0].[personalization_flag], [t0].[primary_location],
> [t0].[print_specification], [t0].[print_template], [t0].[procurement_code],
> [t0].[qty_expected], [t0].[qty_on_backorder], [t0].[qty_on_hand],
> [t0].[qty_reserved], [t0].[qty_available], [t0].[return_gl_account],
> [t0].[sales_gl_account], [t0].[sales_unit], [t0].[serial_number_flag],
> [t0].[special_process], [t0].[status], [t0].[tax_flag],
> [t0].[tesla_qty_on_backorder], [t0].[tesla_qty_reserved],
> [t0].[unit_of_measure], [t0].[vap_cost_percent], [t0].[vendor_code],
> [t0].[weight], [t0].[root_part_number] FROM [production].[dbo].[part] [t0]
> JOIN [production].[dbo].[order_detail_sales] [t1] ON *([t0].[part_number] =
> [t1].[part_number])* JOIN [production].[dbo].[order_header] [t2] ON
> ([t1].[order_number] = [t2].[order_number]) WHERE ([t2].[order_number] = ?)
> OR ([t2].[order_number] = ?) OR ([t2].[order_number] = ?) OR
> ([t2].[order_number] = ?) OR ([t2].[order_number] = ?) OR
> ([t2].[order_number] = ?) OR ([t2].[order_number] = ?) OR
> ([t2].[order_number] = ?) OR ([t2].[order_number] = ?) OR
> ([t2].[order_number] = ?) OR ([t2].[order_number] = ?) OR
> ([t2].[order_number] = ?) OR ([t2].[order_number] = ?) OR
> ([t2].[order_number] = ?) OR ([t2].[order_number] = ?) [bind:
> 1->order_number:57874832, 2->order_number:57874792,
> 3->order_number:57874789, 4->order_number:57874783,
> 5->order_number:57874781, 6->order_number:57874779,
> 7->order_number:57874777, 8->order_number:57874715,
> 9->order_number:57874714, 10->order_number:57874713,
> 11->order_number:57874712, 12->order_number:57874708,
> 13->order_number:57874707, 14->order_number:57874704,
> 15->order_number:57874657]
>
> 4.2.M1-SNAPSHOT: 👎
>
> SELECT DISTINCT [t0].[average_cost], [t0].[backorder_flag],
> [t0].[break_match_code], [t0].[case_location], [t0].[case_qty],
> [t0].[category_code], [t0].[cgs_gl_account],
> RTRIM([t0].[charges_group_code]), [t0].[composition_family],
> [t0].[composition_output_definition], [t0].[custom_vendor],
> [t0].[description], RTRIM([t0].[drop_ship_code]), [t0].[duties_percent],
> [t0].[duties_tax_cost_percent], RTRIM([t0].[envelope_item_number]),
> [t0].[expect_date], [t0].[first_sale_date], [t0].[freight_cost_percent],
> [t0].[inventory_gl_account], [t0].[lead_time], [t0].[license_required],
> RTRIM([t0].[market]), [t0].[material], [t0].[merchandise_cost_percent],
> [t0].[operator_message], [t0].[origin], RTRIM([t0].[part_number]),
> [t0].[personalization_flag], [t0].[primary_location],
> [t0].[print_specification], [t0].[print_template],
> RTRIM([t0].[procurement_code]), [t0].[qty_expected],
> [t0].[qty_on_backorder], [t0].[qty_on_hand], [t0].[qty_reserved],
> [t0].[qty_available], [t0].[return_gl_account], [t0].[sales_gl_account],
> [t0].[sales_unit], [t0].[serial_number_flag], [t0].[special_process],
> [t0].[status], [t0].[tax_flag], [t0].[tesla_qty_on_backorder],
> [t0].[tesla_qty_reserved], [t0].[unit_of_measure], [t0].[vap_cost_percent],
> RTRIM([t0].[vendor_code]), [t0].[weight], RTRIM([t0].[root_part_number])
> FROM [production.dbo.part] [t0] JOIN [production.dbo.order_detail_sales]
> [t1] ON *RTRIM([t0].[part_number]) = RTRIM([t1].[part_number])* JOIN
> [production.dbo.order_header] [t2] ON [t1].[order_number] =
> [t2].[order_number] WHERE ( [t2].[order_number] = ? ) OR (
> [t2].[order_number] = ? ) OR ( [t2].[order_number] = ? ) OR (
> [t2].[order_number] = ? ) OR ( [t2].[order_number] = ? ) OR (
> [t2].[order_number] = ? ) OR ( [t2].[order_number] = ? ) OR (
> [t2].[order_number] = ? ) OR ( [t2].[order_number] = ? ) OR (
> [t2].[order_number] = ? ) OR ( [t2].[order_number] = ? ) OR (
> [t2].[order_number] = ? ) OR ( [t2].[order_number] = ? ) OR (
> [t2].[order_number] = ? ) OR ( [t2].[order_number] = ? ) [bind:
> 1->order_number:57874832, 2->order_number:57874792,
> 3->order_number:57874789, 4->order_number:57874783,
> 5->order_number:57874781, 6->order_number:57874779,
> 7->order_number:57874777, 8->order_number:57874715,
> 9->order_number:57874714, 10->order_number:57874713,
> 11->order_number:57874712, 12->order_number:57874708,
> 13->order_number:57874707, 14->order_number:57874704,
> 15->order_number:57874657]
>
> Thoughts?  I also don't like that it's not writing the "ON" in parenthesis,
> but I'm sure that's just me be a persnickety old man. 👴
>
> -Lon
>


-- 
Best regards,
Nikita Timofeev

Reply via email to