Mailspring/spec
Ben Gotow 07861f64be perf(db): Use subselect to improve thread list query perf (53%!)
Summary:
- Use a sub-select query with much better performance to display the thread list
- Perform analyze on tables after launch

The new query is:

```
SELECT `Thread`.`data` FROM `Thread` WHERE `Thread`.`id` IN (SELECT `id` FROM `ThreadCategory` AS `M26` WHERE `M26`.`value` IN ('9m9ks71k06n5rmx82kgues09p','9s9k25q6j1krjgpkovbcjm7d','13b7ufruoymvih07ki0uahlto','dtmhlzz6phr47zp512knhjgf8','16dvjb84bszfh15kgfrjj37i3','aclwmgncdqjfibp51bvgbeik','17qad7jhbp6tozog3klm5zagt','4x4bkbawiq825u4eu3aus8tll','7axr9f5f1lzpwm2rw2ghkirhq','dsnn660af0pmou2gg3nstga8a','361qr5rva1ieby2r0ec3sn0bm','10fyvba7pjyjgeyr5i65i1zri') AND `M26`.`in_all_mail` = 1  ORDER BY `M26`.`last_message_received_timestamp` DESC LIMIT 200 OFFSET 0) ORDER BY `Thread`.`last_message_received_timestamp` DESC;
`
0|0|0|SEARCH TABLE Thread USING INDEX Thread_id (id=?)
0|0|0|EXECUTE LIST SUBQUERY 1
1|0|0|SCAN TABLE Thread-Category AS M26 USING COVERING INDEX ThreadFancyIndex
1|0|0|EXECUTE LIST SUBQUERY 2
0|0|0|USE TEMP B-TREE FOR (only on 200 result items)
```

Which is twice as performant as:
```
SELECT `Thread`.`data` FROM `Thread` INNER JOIN `ThreadCategory` AS `M26` ON `M26`.`id` = `Thread`.`id` WHERE `M26`.`value` IN ('9m9ks71k06n5rmx82kgues09p','9s9k25q6j1krjgpkovbcjm7d','13b7ufruoymvih07ki0uahlto','dtmhlzz6phr47zp512knhjgf8','16dvjb84bszfh15kgfrjj37i3','aclwmgncdqjfibp51bvgbeik','17qad7jhbp6tozog3klm5zagt','4x4bkbawiq825u4eu3aus8tll','7axr9f5f1lzpwm2rw2ghkirhq','361qr5rva1ieby2r0ec3sn0bm','10fyvba7pjyjgeyr5i65i1zri') AND `M26`.`in_all_mail` = 1  ORDER BY `M26`.`last_message_received_timestamp` DESC LIMIT 200 OFFSET 0;

0|0|1|SCAN TABLE Thread-Category AS M26 USING COVERING INDEX ThreadFancyIndex
0|0|0|EXECUTE LIST SUBQUERY 1
0|1|0|SEARCH TABLE Thread USING INDEX Thread_id (id=?)
```

Test Plan: Broken!

Reviewers: evan, juan

Reviewed By: juan

Differential Revision: https://phab.nylas.com/D2869
2016-04-11 13:29:05 -07:00
..
components fix(focus): Remove focusedField in favor of imperative focus, break apart ComposerView 2016-04-04 15:22:01 -07:00
extensions fix(quick-schedule): Update to use new APIs, remove leftover docs 2016-03-18 10:43:43 -07:00
fixtures perf(db): Use subselect to improve thread list query perf (53%!) 2016-04-11 13:29:05 -07:00
models fix(db-spec): Accompanying spec changes 2016-04-05 19:03:47 -07:00
services
stores perf(db): Use subselect to improve thread list query perf (53%!) 2016-04-11 13:29:05 -07:00
tasks fix(spec): fix bad ref 2016-04-09 22:07:50 -04:00
action-bridge-spec.coffee
auto-update-manager-spec.coffee
buffered-process-spec.coffee
clipboard-spec.coffee
component-registry-spec.coffee
database-object-registry-spec.coffee
date-utils-spec.es6
dom-utils-spec.coffee
extension-registry-spec.coffee
jasmine-helper.coffee
jasmine-jquery.js
jasmine.js
launch-services-spec.coffee
list-selection-spec.coffee
mail-rules-processor-spec.coffee
mailbox-perspective-spec.es6 feat(thread-search): Add spinner to indicate search in progress 2016-04-10 16:20:26 -07:00
menu-manager-spec.coffee
module-cache-spec.coffee
n1-spec-reporter.coffee
nylas-api-spec.coffee fix(specs): * 2016-04-08 16:03:21 -07:00
nylas-env-spec.coffee
nylas-protocol-handler-spec.coffee
nylas-test-utils.coffee bump(react): 0.13.2 => 0.14.7 2016-03-29 01:43:12 -07:00
package-manager-spec.coffee
package-spec.coffee
quoted-html-transformer-spec.coffee
quoted-plain-text-transformer-spec.coffee
spec-bootstrap.coffee
spec-helper-platform.coffee
spec-helper.coffee bump(react): 0.13.2 => 0.14.7 2016-03-29 01:43:12 -07:00
spec-suite.coffee
spellchecker-spec.coffee
style-manager-spec.coffee
styles-element-spec.coffee
task-factory-spec.es6 fix(remove-from-view): Fix logic for delete/remove-from-view behavior: 2016-03-07 18:16:37 -08:00
theme-manager-spec.coffee
time-override.coffee
time-reporter.coffee
undo-manager-spec.coffee
utils-spec.coffee fix(trash/spam): New inAllMail filter applied to all mailbox views except trash and spam 2016-03-10 12:41:32 -08:00