---
title:  Advanced Querying
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

This section includes advanced querying topics such as using query indexes, using query bind parameters, querying partitioned regions and query debugging.

-   **[Performance Considerations](../querying_basics/performance_considerations.html)**

    This topic covers considerations for improving query performance.

-   **[Monitoring Low Memory When Querying](../querying_basics/monitor_queries_for_low_memory.html)**

    The query monitoring feature prevents out-of-memory exceptions from occurring when you execute queries or create indexes.

-   **[Timeouts for Long-Running Queries](../query_additional/query_timeout.html)**

    Configure a timeout value for long running queries, such that they do
not complete, and <%=vars.product_name%> throws an exception when a 
query runs for longer than the configured value.

-   **[Using Query Bind Parameters](../query_additional/using_query_bind_parameters.html)**

    Using query bind parameters in <%=vars.product_name%> queries is similar to using prepared statements in SQL where parameters can be set during query execution. This allows you to build a query once and execute it multiple times by passing the query conditions during run time.

-   **[Querying Partitioned Regions](../querying_basics/querying_partitioned_regions.html)**

    <%=vars.product_name%> allows you to manage and store large amounts of data across distributed nodes using partitioned regions. The basic unit of storage for a partitioned region is a bucket, which resides on a <%=vars.product_name%> node and contains all the entries that map to a single hashcode. In a typical partitioned region query, the system distributes the query to all buckets across all nodes, then merges the result sets and sends back the query results.

-   **[Query Debugging](../query_additional/query_debugging.html)**

    You can debug a specific query at the query level by adding the `<trace>` keyword before the query string that you want to debug.


