mirror of
https://github.com/chatwoot/chatwoot.git
synced 2026-06-28 21:01:02 +08:00
This PR has two changes to speed up contact filtering ### Updated Base Relation Update the `base_relation` to use resolved contacts scope to improve perf when filtering conversations. This narrows the search space drastically, and what is usually a sequential scan becomes a index scan for that `account_id` ref: https://github.com/chatwoot/chatwoot/pull/9347 ref: https://github.com/chatwoot/chatwoot/pull/7175/ Result: https://explain.dalibo.com/plan/c8a8gb17f0275fgf#plan ## Selective filtering in Compose New Conversation We also cost of filtering in compose new conversation dialog by reducing the search space based on the search candidate. For instance, a search term that obviously can’t be a phone, we exclude that from the filter. Similarly we skip name lookups for email-shaped queries. Removing the phone number took the query times from 50 seconds to under 1 seconds ### Comparison 1. Only Email: https://explain.dalibo.com/plan/h91a6844a4438a6a 2. Email + Name: https://explain.dalibo.com/plan/beg3aah05ch9ade0 3. Email + Name + Phone: https://explain.dalibo.com/plan/c8a8gb17f0275fgf |
||
|---|---|---|
| .. | ||
| actions | ||
| assets | ||
| builders | ||
| channels | ||
| config | ||
| configs | ||
| controllers | ||
| dispatchers | ||
| drops | ||
| enterprise | ||
| factories | ||
| finders | ||
| fixtures | ||
| helpers | ||
| integration | ||
| jobs | ||
| lib | ||
| listeners | ||
| mailboxes | ||
| mailers | ||
| models | ||
| policies | ||
| presenters | ||
| requests/api/v1 | ||
| services | ||
| support | ||
| workers | ||
| coverage_helper.rb | ||
| rails_helper.rb | ||
| spec_helper.rb | ||
| test_helper.rb | ||