No hay porque reducir palabras para ello... tienes registros en una tabla que son puras direcciones URLs pero sabes que usarlas de indice es un crimen para el optimizador interno del motor y esto sin contar la lentitud que provocaria
tengo un amigo programador en PHP que tenia un problema similar. El me decia como puedo crear un campo indice (ID) para cada Url si yo no voy a recordarme que ID le corresponde al registro 200 (por ejemplo). Entonces le di una solucion que espero tambien te pueda servir he de igual forma a otros webmasters porque se que esto es un dilema que ha de ocurrir bastante.
Tu me confirmas que tienes una tabla que solo guarda direcciones URLs en los campos. Asumo que es algo mas o menos asi:
mysql> SELECT * FROM ejemplo;
+-------------------------------------+
| direcciones |
+-------------------------------------+
| http://www.google.com |
| http://www.yahoo.com/INDEX.html |
| http://www.amazon.com/INDEX.php |
| http://foro.elhacker.net/INDEX.php |
| http://www.unix.com/INDEX.html?id=5 |
+-------------------------------------+
5 ROWS IN SET (0.00 sec)
Y tienes como index dicho campo (en mi caso direcciones) que es un VARCHAR de longitud variable le asigne 70 de longitud pero sabemos que es dinamica la reserva aca
eso es cruel y pesimo de usarlo como indice. Reducir o quitarle los 'http' no es solucion. Asignarle un ID tampoco porque no vas a saberte el ID correspondiente a cada URL vamos (sobretodo si hablamos de cientos sino miles de URL como registros). Asi que tienes una opcion especial, asigna un campo extra de tipo DECIMAL el cual usaras como indice:
mysql> ALTER TABLE ejemplo ADD codigo DECIMAL(10,0);
Query OK, 5 ROWS affected (0.07 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> CREATE INDEX indice ON ejemplo(codigo);
Query OK, 5 ROWS affected (0.07 sec)
Records: 5 Duplicates: 0 Warnings: 0
En esta parte la tarea te costara, pero valdra la pena, ya que ahora insertaras los datos de esta manera a la DB:
mysql> INSERT INTO ejemplo VALUES('http://www.google.com',crc32('http://www.google.com')), ('http://www.yahoo.com',crc32('http://www.yahoo.com')), ('httpd://foro.elhacker.net',crc32('http://foro.elhacker.net'));
Query OK, 3 ROWS affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM ejemplo;
+---------------------------+------------+
| direcciones | codigo |
+---------------------------+------------+
| http://www.google.com | 1587574693 |
| http://www.yahoo.com | 416577886 |
| httpd://foro.elhacker.net | 794697805 |
+---------------------------+------------+
3 ROWS IN SET (0.00 sec)
Ahora diras sino puedo recordarme de un ID sencillo de 1 o 2 cifras como voy a recordar esos numeros tan largos en el campo codigo
simple la busquedad de la data la haras asi:
mysql> SELECT * FROM ejemplo;
+---------------------------+------------+
| direcciones | codigo |
+---------------------------+------------+
| http://www.google.com | 1587574693 |
| http://www.yahoo.com | 416577886 |
| httpd://foro.elhacker.net | 794697805 |
+---------------------------+------------+
3 ROWS IN SET (0.00 sec)
mysql> SELECT * FROM ejemplo WHERE codigo = crc32('http://www.google.com');
+-----------------------+------------+
| direcciones | codigo |
+-----------------------+------------+
| http://www.google.com | 1587574693 |
+-----------------------+------------+
1 ROW IN SET (0.02 sec)
mysql> SELECT * FROM ejemplo WHERE codigo = crc32('http://www.yahoo.com');
+----------------------+-----------+
| direcciones | codigo |
+----------------------+-----------+
| http://www.yahoo.com | 416577886 |
+----------------------+-----------+
1 ROW IN SET (0.00 sec)
Vas captando algo muchacho? Ahora analizemos que dice el optimizador de MySQL sobre esta consulta:
mysql> EXPLAIN SELECT * FROM ejemplo WHERE codigo = crc32('http://www.yahoo.com');
+----+-------------+---------+------+---------------+--------+---------+-------+------+-------------+
| id | select_type | TABLE | TYPE | possible_keys | KEY | key_len | REF | ROWS | Extra |
+----+-------------+---------+------+---------------+--------+---------+-------+------+-------------+
| 1 | SIMPLE | ejemplo | REF | indice | indice | 6 | const | 1 | USING WHERE |
+----+-------------+---------+------+---------------+--------+---------+-------+------+-------------+
1 ROW IN SET (0.00 sec)
rows = 1
reference = const
super....