Definitivamente, debe dedicar un tiempo a leer sobre la indexación, hay mucho escrito al respecto, y es importante comprender lo que está sucediendo.
En términos generales, el índice impone un orden en las filas de una tabla.
Por simplicidad, imagine que una tabla es solo un gran archivo CSV. Cuando se inserta una fila, se inserta al final. Entonces el orden "natural" de la tabla es solo el orden en que se insertaron las filas.
Imagine que tiene ese archivo CSV cargado en una aplicación de hoja de cálculo muy rudimentaria. Todo lo que hace esta hoja de cálculo es mostrar los datos y numera las filas en orden secuencial.
Ahora imagine que necesita encontrar todas las filas que tienen algún valor "M" en la tercera columna. Dado lo que tienes disponible, solo tienes una opción. Escanea la tabla comprobando el valor de la tercera columna para cada fila. Si tienes muchas filas, ¡este método (un "escaneo de tabla") puede llevar mucho tiempo!
Ahora imagina que, además de esta tabla, tienes un índice. Este índice en particular es el índice de valores en la tercera columna. El índice enumera todos los valores de la tercera columna, en un orden significativo (por ejemplo, alfabéticamente) y para cada uno de ellos, proporciona una lista de números de fila donde aparece ese valor.
Ahora tiene una buena estrategia para encontrar todas las filas donde el valor de la tercera columna es "M". Por ejemplo, puede realizar un binary search!Mientras que la exploración de tabla requiere que busque N filas (donde N es el número de filas), la búsqueda binaria solo requiere que observe las entradas de índice log-n, en el peor de los casos. ¡Guau, eso es mucho más fácil!
Por supuesto, si tiene este índice y está agregando filas a la tabla (al final, ya que así es como funciona nuestra tabla conceptual), debe actualizar el índice todas las veces. Así que haces un poco más de trabajo mientras escribes filas nuevas, pero ahorras mucho tiempo cuando estás buscando algo.
Por lo tanto, en general, la indexación crea una compensación entre la eficacia de lectura y la eficiencia de escritura. Sin índices, las inserciones pueden ser muy rápidas: el motor de base de datos simplemente agrega una fila a la tabla. A medida que agrega índices, el motor debe actualizar cada índice mientras realiza la inserción.
Por otro lado, las lecturas se vuelven mucho más rápidas.
Afortunadamente eso cubre sus dos primeras preguntas (como otros han respondido, usted necesita encontrar el equilibrio correcto).
Su tercer escenario es un poco más complicado. Si está utilizando LIKE, los motores de indexación generalmente le ayudarán con su velocidad de lectura hasta el primer "%". En otras palabras, si está SELECCIONANDO DONDE la columna LIKE 'foo% bar%', la base de datos usará el índice para buscar todas las filas donde la columna comienza con "foo", y luego deberá escanear ese conjunto de filas intermedio para encontrar el subconjunto que contiene "barra" SELECCIONAR ... DONDE la columna LIKE '% bar%' no puede usar el índice. Espero que puedas ver por qué.
Finalmente, debe comenzar a pensar en los índices en más de una columna. El concepto es el mismo, y se comporta de manera similar a lo LIKE: esencialmente, si tiene un índice en (a, b, c), el motor continuará usando el índice de izquierda a derecha lo mejor que pueda. Entonces, una búsqueda en la columna a podría usar el índice (a, b, c), como lo haría uno en (a, b). Sin embargo, el motor necesitaría hacer una exploración completa de la tabla si estuviera buscando DONDE b = 5 Y c = 1)
Espero que esto ayude a arrojar algo de luz, pero debo reiterar que es mejor que gaste unas pocas horas hurgando en busca de buenos artículos que expliquen estas cosas en profundidad. También es una buena idea leer la documentación de su servidor de base de datos en particular. La forma en que los planificadores de consultas implementan y usan los índices puede variar ampliamente.
Probablemente deberías volver a hacer la pregunta. La elección de Índices es una parte importante para la optimización de cualquier modelo de base de datos. Y a mi punto de vista no relacionado con php. – VGE