Optimizing hierarchical SQL queries