  Exploiting the relationships among data is a classical query optimization
technique. As persistent data is increasingly being created and maintained
programmatically, prior work that infers data relationships from data
statistics misses an important opportunity. We present ConstrOpt, the first
tool that identifies data relationships by analyzing database-backed
applications. Once identified, ConstrOpt leverages the constraints to optimize
the application's physical design and query execution. Instead of developing a
fixed set of predefined rewriting rules, ConstrOpt employs an
enumerate-test-verify technique to automatically exploit the discovered data
constraints to improve query execution. Each resulting rewrite is provably
equivalent to the original query. Using 14 real-world web applications, our
experiments show that ConstrOpt can discover numerous data constraints from
code analysis and improve real-world application performance significantly.
