@Override
	RecordIterator getSymbolsByNameAndNamespace(String name, long id) throws IOException {
		// create a range of hash fields for all symbols with this name and namespace id over all
		// possible addresses
		Field start = computeLocatorHash(name, id, MIN_ADDRESS_OFFSET);
		if (start == null) {
			return EmptyRecordIterator.INSTANCE;
		}

		Field end = computeLocatorHash(name, id, MAX_ADDRESS_OFFSET);

		RecordIterator it = symbolTable.indexIterator(SYMBOL_HASH_COL, start, end, true);
		it = new V3ConvertedRecordIterator(it);

		RecordIterator filtered = getNameAndNamespaceFilterIterator(name, id, it);
		return new V3ConvertedRecordIterator(filtered);
	}
SymbolDatabaseAdapter for version 3

This version provides for fast symbol lookup by namespace and name and introduced the use of 
sparse table columns for storing optional symbol data (hash, primary, datatype-ID, variable-offset).
It was created in June 2021 with ProgramDB version 24. 
It was first in affect within Ghidra starting at version 10.1
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV3.java