Yes you are right, the SQL you appended here is doing a union of the envelopes of all features, and it was executed by the database engine. In Map Suite 9 we did more strict checks for SQL statement than Map Suite 6, this may lose a bit of performance. In Map Suite 9 the BBOX will be cached and refreshed for SpatialDataType.Geography in MsSql2008FeatureSource when the GetBoundingBox() method is called.
There is a workaround for this. As you mentioned that the SQL in 6 is more quickly than 9, we can replace or rebuild the SQL in the ExecutingSqlStatement
The following is the code snippets:
void LoadMsSql2008FeatureLayer_ExecutingSqlStatement(object sender, ExecutingSqlStatementMsSql2008FeatureSourceEventArgs e)
if (e.ExecutingSqlStatementType == ExecutingSqlStatementType.GetBoundingBox)
e.SqlStatement = "";// your sql statement
Hope it's helpful.