I’m not using Mail.app on OS X these days (opted for MailMate), but I received an email from Mathias Törnblom updating the database vacuuming trick I’d posted previously. It makes the script work for Mail on El Capitan, and maintains backward compatibility.
The code below will quit Mail, vacuum the SQLite index, then re-open Mail. On a large email database that hasn’t been optimized for a while, this can provide significant improvements in responsiveness and speed. To use the script, copy and paste it into a new document in Script Editor (make sure the language is set to AppleScript), and save it as a Script (scpt) file. Then you can run it via a launcher (LaunchBar, Alfred, etc.) or via the Scripts menu.
(*Speed up Mail.app by vacuuming the Envelope IndexCode from: http://www.hawkwings.net/2007/03/03/scripts-to-automate-the-mailapp-envelope-speed-trick/Originally by "pmbuko" with modifications by RomuloUpdated by Brett Terpstra 2012Updated by Mathias Törnblom 2015 to support V3 in El Capitan and still keep backwards compabilityUpdated by @lbutlr for V5 and Container folder in High Sierra and use du*)tellapplication"Mail"toquitsetos_versiontodo shell script"sw_vers -productVersion"setmail_versionto"V2"considering numeric stringsif"10.10"≤os_versionthensetmail_versionto"~/Library/Mail/V3/Maildata/Envelope\\ Index"if"10.12"<os_versionthensetmail_versionto"~/Library/Mail/V4/Maildata/Envelope\\ Index"if"10.13"≤os_versionthensetmail_versionto"~/Library/Containers/com.apple.mail/Data/Library/Mail/V5/Maildata/Envelope\\ Index"endconsideringsetsizeBeforetodo shell script"du -h "&mail_version&"| awk {'print $1'}"do shell script"/usr/bin/sqlite3 "&mail_version&" vacuum"setsizeAftertodo shell script"du -h "&mail_version&"| awk {'print $1'}"display dialog("Mail index before: "&sizeBefore&return&"Mail index after: "&sizeAfter&return&return&"Enjoy the new speed!")tellapplication"Mail"toactivate