### Description

Tracking total hits sometimes has a non-negligible impact on performance. We should disable it when not strictly required.
x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/execution/search/Querier.java
}
        SearchRequest search = prepareRequest(
            sourceBuilder,
            cfg,
            query.shouldIncludeFrozen(),
            Strings.commaDelimitedListToStringArray(index)
        );
        @SuppressWarnings("rawtypes")
        List<Tuple<Integer, Comparator>> sortingColumns = query.sortingColumns();
        listener = sortingColumns.isEmpty() ? listener : new LocalAggregationSorterListener(listener, sortingColumns, query.limit());
        if (cfg.task() != null && cfg.task().isCancelled()) {
            listener.onFailure(new TaskCancelledException("cancelled"));
        } else if (query.isAggsOnly()) {
            if (query.aggs().useImplicitGroupBy()) {
                client.search(search, new ImplicitGroupActionListener(listener, client, cfg, output, query, search));
            } else {
                searchWithPointInTime(search, new CompositeActionListener(listener, client, cfg, output, query, search));
            }
        } else {
            searchWithPointInTime(search, new SearchHitActionListener(listener, client, cfg, output, query, sourceBuilder));
        }
    }
    private void searchWithPointInTime(SearchRequest search, ActionListener<SearchResponse> listener) {
        final OpenPointInTimeRequest openPitRequest = new OpenPointInTimeRequest(search.indices()).indicesOptions(search.indicesOptions())
            .keepAlive(cfg.pageTimeout());
        client.execute(OpenPointInTimeAction.INSTANCE, openPitRequest, wrap(openPointInTimeResponse -> {
            String pitId = openPointInTimeResponse.getPointInTimeId();
            search.indices(Strings.EMPTY_ARRAY);
            search.source().pointInTimeBuilder(new PointInTimeBuilder(pitId));
            ActionListener<SearchResponse> closePitOnErrorListener = wrap(searchResponse -> {