El problema que tenemos muchos a la hora de desarrollar es no profundizar en las caracterÃsticas que nos ofrece una herramienta. En este caso, solemos realizar una serie de consultas en MySQL que se podrÃan optimizar para que fuera todo más rápido.
Búsqueda de palabras
/* Muy rápida */
SELECT * FROM tabla WHERE MATCH (`campo`) AGAINST ('palabra')
/* Rápida */
SELECT * FROM tabla WHERE MATCH (`campo`) AGAINST ('+palabra' IN BOOLEAN MODE)
/* Lentas */
SELECT * FROM tabla WHERE RLIKE '(^| +)palabra($| +)'
/* o */
SELECT * FROM tabla WHERE
RLIKE '([[:space:]]|[[:<:]])palabra([[:space:]]|[[:>:]])'
Búsquedas contenidas
/* Muy rápida */
SELECT * FROM tabla WHERE MATCH (`campo`) AGAINST ('palabra*' IN BOOLEAN MODE)
/* Rápida */
SELECT * FROM tabla WHERE FIELD LIKE 'palabra%'
/* Lentas */
SELECT * FROM tabla WHERE MATCH (`campo`) AGAINST ('*palabra*' IN BOOLEAN MODE)
/* o */
SELECT * FROM tabla WHERE campo LIKE '%palabra%'
Número de registros
/* Muy rápida */
SELECT SQL_CALC_FOUND_ROWS * FROM tabla WHERE condición LIMIT 0, 10
SELECT FOUND_ROWS()
/* Rápido */
SELECT * FROM tabla WHERE condición LIMIT 0, 10
SELECT COUNT(clave) FROM TABLE WHERE condición
Lo más lento es recuperar los registros y luego un script (PHP por ejemplo) contarlos.
PHP Mysql tips
Gracias diarioTHC por el enlace