In PostgreSQL, indexing JSON documents can be similar to indexing relational table columns, allowing for efficient querying based on access patterns. To demonstrate this, a Pokémon GO Pokédex dataset is used, with each Pokémon stored as a row in a table containing relevant information in a JSONB column. Indexing techniques such as creating indexes on scalar values using `->>` and on arrays using GIN are explored, allowing for fast and scalable access to specific data within the JSON documents. Additionally, views can be created to encapsulate indexed expressions, ensuring consistency between the view definition and query logic. By indexing JSON keys and attributes based on access patterns, SQL databases can provide flexibility in optimizing for new read patterns without requiring changes to application code, making them suitable for semi-structured data storage.