no_found_rows removes a COUNT query you are not using

Every WP_Query runs a second query to count the total number of matching rows, so that pagination can be rendered. If the query is powering a sidebar widget or a related-posts block, nothing ever reads that count and the work is pure waste.

$related = new WP_Query( array(
    'post_type'      => 'product',
    'posts_per_page' => 4,
    'no_found_rows'  => true,   // skip SQL_CALC_FOUND_ROWS
) );

On a large table the counting query can cost as much as the query itself, because it has to evaluate the whole result set rather than the first four rows. Two companions are worth setting at the same time on a query that only needs post objects: update_post_meta_cache and update_post_term_cache, both of which fire extra queries you may not want.