A Straight-Line Program (SLP) \(\mathcal {G}\) for a string \(\mathcal {T}\) is a context-free grammar (CFG) that derives \(\mathcal {T}\) only, which can be considered as a compressed representation of \(\mathcal {T}\) . In this paper, we show how to encode \(\mathcal {G}\) in \(n \lceil \lg N \rceil + (n + n') \lceil \lg (n+\sigma ) \rceil + 4n - 2n' + o(n)\) bits to support random access queries of extracting \(\mathcal {T}[p..q]\) in worst-case \(O(\log N + q - p)\) time, where N is the length of \(\mathcal {T}\) , \(\sigma \) is the alphabet size, n is the number of variables in \(\mathcal {G}\) and \(n' \le n\) is the number of symmetric centroid paths in the DAG representation for \(\mathcal {G}\) . The time complexity is almost optimal because Verbin and Yu [CPM 2013] proved that \(O(\log N)\) term cannot be significantly improved in general with \(\textrm{poly}(n)\) -space data structures. We also present alternative encodings that achieve the same random access time with \(n \lceil \lg N \rceil + n \lceil \lg (n+\sigma ) \rceil + 5n + n' + o(n)\) or \(n \lceil \lg N \rceil + n \lceil \lg (n+\sigma ) \rceil + 5n - n' + \sigma + o(n+\sigma )\) bits of space.