Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Diagnoses and fixes slow Qdrant search. Use when someone reports 'search is slow', 'high latency', 'queries take too long', 'low QPS', 'throughput too low', 'filtered search is slow', or 'search was fast but now it's slow'. Also use when search performance degrades after config changes or data growth.
.claude/skills/qdrant-qdrant-search-speed-optimization/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 42% | 0% |
| case-19 | ✗→✓ | ▲ Improved | -36% | 0% |
There the multiple possible reasons for search performance degradation. The most common ones are:
hnsw_ef, complex filters without payload index)Use when: individual queries take too long regardless of load.
with_payload: false and with_vectors: false to see if payload retrieval is the bottleneckUse when: system can't serve enough queries per second under load.
default_segment_number to 2) Maximizing throughputUse when: filtered search is significantly slower than unfiltered. Most common SA complaint after memory.
is_tenant=true for primary filtering condition: Tenant indexnested filtering conditions as a primary filter. It might force qdrant to read raw payload values instead of using index.indexed_only=true parameter, if the query is significantly faster, it means that the optimizer is still running and has not yet indexed all segments.optimizer_cpu_budget to reserve more CPU for queriesprevent_unoptimized=true to prevent creating segments with a large amount of unindexed data for searches. Instead, once a segment reaches the so called indexing_threshold, all additional points will be added in ‘deferred state’. Learn more here
memory: cold/cached on Qdrant 1.19 or newer, always_ram: false on 1.18 or older| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 22,257 | 14,512 | -35% | 1 | 1 | 0% | 3,836 | 3,573 | -7% | 0 | 0 | — |
case-02 | fail→pass | 21,207 | 10,347 | -51% | 1 | 1 | 0% | 3,460 | 3,053 | -12% | 0 | 0 | — |
case-03 | fail→pass | 21,562 | 13,158 | -39% | 1 | 1 | 0% | 3,043 | 2,786 | -8% | 0 | 0 | — |
case-04 | fail→pass | 18,651 | 10,236 | -45% | 1 | 1 | 0% | 3,141 | 2,852 | -9% | 0 | 0 | — |
case-05 | pass→pass | 11,104 | 5,663 | -49% | 1 | 1 | 0% | 1,834 | 2,146 | +17% | 0 | 0 | — |
case-06 | pass→pass | 15,416 | 7,534 | -51% | 1 | 1 | 0% | 2,199 | 2,155 | -2% | 0 | 0 | — |
case-07 | pass→pass | 16,491 | 8,816 | -47% | 1 | 1 | 0% | 2,700 | 2,630 | -3% | 0 | 0 | — |
case-08 | pass→pass | 13,930 | 6,107 | -56% | 1 | 1 | 0% | 2,301 | 2,183 | -5% | 0 | 0 | — |
case-09 | pass→pass | 20,849 | 9,833 | -53% | 1 | 1 | 0% | 2,721 | 2,862 | +5% | 0 | 0 | — |
case-10 | pass→pass | 15,561 | 9,645 | -38% | 1 | 1 | 0% | 2,823 | 2,338 | -17% | 0 | 0 | — |
case-11 | pass→pass | 8,474 | 5,732 | -32% | 1 | 1 | 0% | 1,595 | 2,151 | +35% | 0 | 0 | — |
case-12 | pass→pass | 19,379 | 9,939 | -49% | 1 | 1 | 0% | 2,790 | 2,604 | -7% | 0 | 0 | — |
case-13 | pass→pass | 10,616 | 3,654 | -66% | 1 | 1 | 0% | 1,782 | 1,622 | -9% | 0 | 0 | — |
case-14 | pass→pass | 17,636 | 7,243 | -59% | 1 | 1 | 0% | 2,858 | 2,099 | -27% | 0 | 0 | — |
case-15 | pass→pass | 12,146 | 6,478 | -47% | 1 | 1 | 0% | 1,839 | 1,968 | +7% | 0 | 0 | — |
case-16 | pass→pass | 12,020 | 4,540 | -62% | 1 | 1 | 0% | 1,714 | 1,755 | +2% | 0 | 0 | — |
case-17 | fail→pass | 8,138 | 5,445 | -33% | 1 | 1 | 0% | 1,419 | 2,008 | +42% | 0 | 0 | — |
case-18 | pass→pass | 9,751 | 7,608 | -22% | 1 | 1 | 0% | 1,756 | 2,202 | +25% | 0 | 0 | — |
case-19 | fail→pass | 18,011 | 3,765 | -79% | 1 | 1 | 0% | 2,485 | 1,589 | -36% | 0 | 0 | — |
case-20 | pass→fail | 20,019 | 14,692 | -27% | 1 | 1 | 0% | 2,899 | 3,321 | +15% | 0 | 0 | — |
case-21 | pass→pass | 13,958 | 12,260 | -12% | 1 | 1 | 0% | 2,688 | 3,072 | +14% | 0 | 0 | — |
case-22 | pass→pass | 11,848 | 10,914 | -8% | 1 | 1 | 0% | 2,252 | 2,737 | +22% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +18 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.