Нативный GAE дэйтастор не умеет фильтровать строки по префиксу, как это делает, например mysql
SELECT * FROM foo WHERE bar LIKE 'prefix%';
Взамен этого в мануале предлагается следущий трюк:
db.GqlQuery("SELECT * FROM foo WHERE bar >= :1 AND bar < :2",
"prefix", u"prefix" + u"\ufffd")
То есть, выбрать все значения которые лежат между префиксом и префиксом + наибольший unicode символ. В отсортированом по этому полю дэйтасете это даст как раз выборку по префиксу.
Учитывая, что он создает индексы для подобных выборок автоматически, должно быть довольно быстро.
Трюк, конечно, из разряда удаления гланд через анус (кроме того, непонятно, как матчить строки по постфиксу, или просто по вхождению), с другой стороны, надо попробовать такое в MySQL, может побыстрее нэйтивного лайка будет. Хотя, не исключено, что он именно так и реализован внутренне :).
Stay tuned, сегодня–завтра будет пост по расчетам медиан на крупных выборках с профайлингом и т.п.