I’ll let the devs comment on the difference between 1.6s and 17s there, but:
do not use has() other than debugging, it’s basically a full table scan of a predicate. Use almost any function at the root of your query and it will use an index vs just starting with every uid that has that predicate.
Storage in dgraph is by predicate (in other words: key) only. Nodes (as a storage container) do not exist. Only a list of UIDs that a predicate has. Once understood, this explains a ton about dgraph’s query complexity by query.