En realidad, el mejor tipo de clave primaria (supongo que al decir índices, te refieres a ellas), son las que surgen de la entidad que se está representando en la tabla, y no necesariamente un indice numérico ni incremental.
El modelo relacional no habla jamás de campos numéricos cuando se menciona las PK, sino de atributos o conjuntos de atributos que permiten identificar unívocamente un registro en una tabla. Pero eso no quiere decir que deban ser numéricos.
Una persona, por ejemplo, es identificable de muchas formas: por su nombre y apellido, por su filiación, por su generos, o por todos estos elementos al mismo tiempo. De ello se desprende que puede identificarse por una PK creada en base a un conjunto de datos al mismo tiempo, ya que cada uno de ellos, por separado, no puede hacerlo.
Por supuesto que en el mundo real, los sistemas de identificación de personas evolucionaron y resolvieron el problema hace mucho tiempo, tanto por la creación de los registros civiles unificados, como por el uso de un documento único de identificación a nivel país. Si lo meditas, una persona, en realidad se identifica pos su numero de documento. Que sea incremental, es irrelevante. Lo que nos interesa en ese caso es que es único.
Ahora bien, la mejor clave es, entonces, un valor o conjunto de valores que a existan entre los campos de la tabla, y solo se deben fabricar identificadores (del tipo que sean) si luego de normalizar (ver Normalización de Bases de Datos) la tabla hasta la 3FN no se ha llegado a una clave candidata.
Poner identificadores numericos y autoincrementales es propio de programadores, no de diseñadores de datos. Son fáciles, simples de programar, pero adolecen de una enorme cantidad de problemas en cuanto quieres expandir la base: Traen problemas de migración, de respaldo, de restauración de datos y de consolidación de origenes.
Como no identifican el objeto contenido en el registro, si no el orden de entrada, no son funcionales cuando necesitas realizar consultas complejas, y terminan siendo más obstáculo que ventaja.
Sintetizando:
- Las PK numéricas autoincrementales son una pésima idea.
- Las mejores PK e índices se logran con datos propios de la tabla.
- La programación de la aplicación se hace más exigente, pero los resultado de las consultas mejoran la performance.
- Tienen mejor capacidad para integrar datos, restaurar backups, y consolidar registros históricos, porque no dependen del valor de un número sino de la identidad del objeto.
Finalmente: Si estos conceptos te causan confusión, necesitas volver a los apuntes y repasar los fundamentos de las bases de datos, en especial el paradigma Entidad-Relación.