Ver Mensaje Individual
  #29 (permalink)  
Antiguo 03/01/2011, 16:24
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Sistema de busqueda por selects

No es un motor de búsqueda. Eso es otra cosa.

Vamos por partes:
MySQl, a diferencia de otros DBMS (DataBase Management System) no posee una sola forma de construir y administra tablas, sino que tiene varios. Cada uno de estos modos de crear tablas requiere de subsistemas de software que se denominan "motores de tablas", ya que esa es su función: Administrar el sistema de tablas. Algunos han sido desarrollados por ellos sobre la base de otros estándares, otros son licenciados.
Entre los motores desarrollados por MySQL está el MyISAM, basado en ISAM, que son tablas rápidas, eficientes y fáciles de administrar a la hora de implementar bases de datos en Web, pero no tienen soporte de restricciones de clave foránea, tienen cierto límite de longitud (definido por sistema operativo, y tampoco soportan transacciones (ACID).
El motor MyISAM era el motor por default hasta la versión 4.x.
En MySQL 4.x ya venía otro motor de tablas denominado InnDB que si tiene soporte de transacciones y restricciones de clave foránea, pero ese mismo InnoDB hay dos cosas que no puede implementar (restricciones propias de su diseño): Los índices FULLTEXT y los SPATIAL, por lo que no se puede usar MATCH(...) AGAINST(...) con ese tipo de tablas, a pesar de ser muy buenas para todos los demás usos.
El motor InnoDB es el motor por default desde la versión 5.0.x.

¿Cómo saber si tienes habilitado uno o el otro?
Simplemente ejecutando:
Código MySQL:
Ver original
  1. mysql> SHOW ENGINES;
  2. +------------+---------+----------------------------------------------------------------+
  3. | Engine     | Support | Comment                                                        |
  4. +------------+---------+----------------------------------------------------------------+
  5. | MyISAM     | YES     | Default engine as of MySQL 3.23 with great performance         |
  6. | MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      |
  7. | InnoDB     | DEFAULT | Supports transactions, row-level locking, and foreign keys     |
  8. | BerkeleyDB | NO      | Supports transactions and page-level locking                   |
  9. | BLACKHOLE  | YES     | /dev/null storage engine (anything you write to it disappears) |
  10. | EXAMPLE    | NO      | Example storage engine                                         |
  11. | ARCHIVE    | YES     | Archive storage engine                                         |
  12. | CSV        | NO      | CSV storage engine                                             |
  13. | ndbcluster | NO      | Clustered, fault-tolerant, memory-based tables                 |
  14. | FEDERATED  | YES     | Federated MySQL storage engine                                 |
  15. | MRG_MYISAM | YES     | Collection of identical MyISAM tables                          |
  16. | ISAM       | NO      | Obsolete storage engine                                        |
  17. +------------+---------+----------------------------------------------------------------+
  18. 12 rows in set (0.00 sec)

Como puedes ver, este SHOW ENGINES devuelve una tabla de tres columnas. La primera te da el nombre del motor, la segunda columna te dice qué motores están activos y cuál es el motor por default, y la tercera te da una breve descripción de las capacidades.

Todas estas cosas y otras muchas se encuentran y aprenden leyendo el manual de referencia. Los tutoriales son muy limitados respecto a este tipo de cosas, ya que el objetivo de ellos es enseñar a hacer consultas y no a conocer el MySQL a fondo.

Finalmente, si quieres probar si tu versión de MySQL funciona bien, usa el phpMyAdmin y ejecuta sucesivamente la misma secuencia que yo usé en mi prueba:

Código MySQL:
Ver original
  1. DROP TABLE IF EXISTS articles;
  2.  
  3. CREATE TABLE articles (
  4.   title VARCHAR(200),
  5.   body TEXT,
  6.   FULLTEXT (title,body)) engine = MyISAM;
  7.  
  8. INSERT INTO articles (title,body) VALUES
  9.   ('MySQL Tutorial','DBMS stands for DataBase ...'),
  10.   ('How To Use MySQL Well','After you went through a ...'),
  11.   ('Optimizing MySQL','In this tutorial we will show ...'),
  12.   ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
  13.   ('MySQL vs. YourSQL','In the following database comparison ...'),
  14.   ('MySQL Security','When configured properly, MySQL ...');
  15.  
  16. SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('%database%');
  17.  
  18. SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('%%');
  19.  
  20. SELECT * FROM articles
  21. WHERE MATCH (title,body) AGAINST ('%database%','%Never%');

Te tiene que dar exactamente los mismos resultados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 03/01/2011 a las 16:30