Skip to main content
Available for self-hosted Business plan and above
Path: Admin Panel → Table Query Ops Use Table search and indexes when views, filters, relations, or searches on a large table become slow. Teable watches the query workload in the background and summarizes each table: how it is searched today, which fields are covered, which physical indexes exist, and how many slow queries it saw recently. Instance administrators configure search coverage, create indexes, and follow the results here.
The page only queues tasks; it never changes the database directly. Every change runs asynchronously in the background, so confirm the outcome under Tasks / history.
Table Query Ops is off by default. Set V2_TABLE_QUERY_OPS_ENABLED to true on the backend and restart, and the page starts collecting observations.

Find the table to work on

The page opens on the table list. The state buttons across the top carry their own counts and narrow the list: The search box accepts table, Project, and Space names or IDs. Sorting is either Most slow queries or Table name. Observation window covers the last 1 hour or 24 hours, and every observation figure in the list follows that window. Observations are kept for 2 days; anything older no longer appears in the list. Each row gives the table’s estimated rows and size, the requests and slow queries within the window, the current search method and field coverage, the number of filter/sort indexes, and the counts of pending recommendations and active tasks. Click a table name to open its detail. About index states, next to the state buttons, explains how these counts are measured.

Read the index state

The table list and the table detail both show an index state next to the search method: Two lines can appear below the state. Configured: pg_bigm / pg_trgm means the saved provider differs from the search method in use, and Indexed-search runtime switch: off means the index is ready but the runtime is off, so search still runs ILIKE.
A published index does not mean every search hits it: a probe that is too short, or a field outside the coverage, still falls back to ILIKE. This page reports the state of the index, not proof that recent requests hit it.

Configure search coverage

The Search coverage tab shows the table’s current search method, how many fields are covered, and the Serving coverage of each field. Show uncovered fields narrows the list to the fields not yet included; fields marked Not eligible cannot contribute to a substring search index.
Serving coverage requires published, usable index metadata and the runtime switch on; a saved configuration alone does not count. Coverage is explicit, so fields you add later are not included automatically; configure the table again to bring them in.
Choose Configure search on a table that has never been configured, or Update selection / rebuild on one that has, which opens with the provider and field selection saved last time. The dialog asks for: Analyze and dry-run runs the change without committing it and reports the covered field count, estimated rows, whether plan evidence exists, and the impact of creating or rebuilding. Tables estimated at 50,000 rows or more, or of unknown size, also require the maintenance-window acknowledgement. Then choose Confirm and queue task.
Creating or rebuilding search coverage generates a search column and a GIN index. It can rewrite the whole table and hold locks, and indexed search is briefly interrupted while it runs. Schedule it inside a maintenance window.
What the dialog returns is a task receipt, not a result. Close it and follow the task under Tasks / history. Submitting the same change again returns the existing task.

Manage filter and sort indexes

The Filter / sort indexes tab lists the physical indexes that serve filter predicates and ordering on this table, each with its validity, whether Teable manages it, its size, and its definition. These are managed separately from substring search indexes. Pending actions below holds the system’s index recommendations and says whether plan evidence backs each one. Review index creation shows the proposed index, the database it runs against, and the evidence; after you confirm, Teable runs CREATE INDEX CONCURRENTLY asynchronously. Large tables and tables of unknown size need the maintenance-window acknowledgement here too.
This page does not delete indexes. Unmanaged and system indexes may protect constraints or serve other workloads, so they are left alone.

Diagnose specific queries

When someone reports a slow table and no recommendation covers it, open the Query diagnosis tab and choose Analyze queries. The analysis only reads saved query shapes and available plan evidence; it creates nothing. The conclusion is one of Plan-backed index opportunities found, No index opportunity confirmed by the available plans, or Insufficient evidence. Insufficient evidence does not mean a sequential scan happened: a slow observation alone does not establish that the access path is at fault. Below it, each affected query is listed with whether it came from real traffic or a saved view configuration, and the estimated plan cost before and after the proposed index (plan cost, not milliseconds).

Follow the results

The Tasks / history tab holds three parts:
  • Tasks: background tasks for this table, with status, attempt count, task kind, and failure reason. When a task eventually succeeded after failing, the error is labelled as a prior attempt.
  • Search configuration history: the provider, status, and field list of each past coverage configuration.
  • Recommendation history: recommendations that were accepted, dismissed, or superseded.
History loads only the most recent entries; when there are more, a line above the list gives the total.
While a table has a queued or running task, the buttons for configuring search and creating indexes stay disabled. Wait for the task to finish.
Last modified on September 15, 2026