Ya teneis que estar cansados de mis despotriques de mi trabajo, pero siempre suelen ser por mis compañeros (ayer de hecho me tuve que tragar una bronca y disculparme cuando no era cosa mía, vine cabreada). Pero es que el propio trabajo a veces me hace tirarme de los pelos, y esta vez tengo un buen ejemplo.
No me voy a mojar mucho detallando porque sería fácil que encontraran este blog (suficiente es que se vea mi careto por alguna parte), así que diré que programando tengo que hacer selects, dentro de un lenguaje, y que éstas se traducen por un driver a la sintaxis de Oracle. Es una compañía grande, así que me encuentro con tablas de millones de registros fácilmente, alguna hasta con más de 100 campos, de modo que hay que procurar hacer las cosas de forma óptima.
Hoy, pues nada, haciendo una consulta sobre una tabla de casi 1 millón de registros. Como no hay índice para la consulta que tengo que hacer, sugiero la idea, y se me acepta. Tan chula yo, voy y escribo más o menos esto:
select tablita.*
from tablita
where tablita.indice15=(tal,pascual)
and blablabla…
indice15 para mi siempre ha sido que utilizo el índice 15, es decir el que acababa de crear. Lo presento, y me dicen que eso no es óptimo, que no estoy utilizando el índice ¿WTF? Vale, por una parte entiendo que en el fondo, .indice15 en realidad es un campo combinado, un campo oculto de la tabla que es la concatenación de tal y de pascual. Pero si así no usa el índice, ¿entonces qué hace? Pues por defecto Oracle hará uso del índice que le digan de las estadísticas, o bien del índice 1, la clave primaria.
¡Y dónde leñes le digo que no quiero que haga lo que le de la gana! Pues la solución me ha dado ganas de estrangular a todos los indios programadores: añadiendo,
order by tablita.indice15
¿¡QUÉ!? ¡Order es para ordenar! Para mi siempre el order by se ha ejecutado después de tener en memoria todos los resultados de la select. Pues aquí no, aquí si lo pones estás obligando a la base de datos a usar ese índice. Me dan ganas de pegarme un tiro con cosas como estas, porque no es algo que puedas deducir, ¡se lo sacan de la manga! Y tampoco tengo acceso a ver la traza de las selects en Oracle, no se fían de mi T.T así que solo puedo saber si estoy haciendo una select mejor o peor, a ojo de buen cubero.
Lo que más rabia me da es enterarme de cosas como esta cuando llevo ya un año programando.
Y escribiendo esto, me viene una pregunta. Si quiero obligar a que la select utilice ese índice, pero yo quiero los resultados ordenados por otra cosa, ¿qué? ¿Ajo y agua? ¡Ja!
Hoy ha sido una de mis tardes de expedición, que yo las llamo. Son tardes en las que salgo del trabajo y me pongo a explorar Madrid, o simplemente ir por caminos nuevos al mismo destino. Al final siempre acabo en el mismo lugar, como un río acaba en el mar: en la FNAC (¿por qué le pondremos el “la” delante”?). A la gilipollas de turno la han encasquetado el regalo de cumpleaños del jefe. No contentos con ello, casi nadie se ha mojado y me toca poner de mi bolsillo buena parte.
Primero me he ido a hacer socia, que ya era hora, llevo gastada una pasta en este año en la dichosa cadena. Luego, me he ido al tajo: a buscar el Creative Zen Stone. Necesita un mp3 chiquitín chiquitín, básico, para el gimnasio. Me dijeron “el Ipod ese”, pero me niego (como con cualquier cosa de Apple) a gastar dinero en la mierda del Shuffle, para qué gastar demás pudiendo gastar menos por algo mejor. Bueno, pues el cacharro estaba, pero lo que había era uno demasiado básico: 1 gb. Ya. 29 euros, aunque en la página veo que dicen 25,90.
En Pixmanía había visto el mismo cacharro con 2 gigas, altavoz y funda por el mismo precio, así que chula yo, me he bajado de Callao al Gula Gula y de ahí a Pixmanía, que sabía dónde estaba pero no con seguridad. La tienda parece un poco desolada, pero me han atendido 3 chicos majísimos, con una pinta de frikis enorme (y no lo digo en tono despectivo, al contrario, para mi son adorables XD), y me he salido con la mía: por el mismo precio, 2 gigas, auriculares y funda. Eso sí, hasta el miércoles no lo tendré y toca darse otro paseo, pero no importa.
A parte. Tanto en la Fnac como en Pixmanía me han pedido el email. No sé por qué, pero he dado mi otra cuenta de gmail, la de mi nombre, la personal. Es como si me avergonzase de lo de aeris17, quizás por que no tengo 17 años, aunque no tenga que ver ya que viene de mi cumpleaños, pero no te vas a poner a dar explicaciones… prf.
Hay dos asignaturas hay en mi carrera llamadas Ingeniería del Software I, y luego claro la II. Te cuentan métodos de desarrollo de software, el ciclo de vida en cascada, el iterativo, el incremental, el de espiral, el prototipado, el RUP, Métrica V3. Te cuentan que cada fase tiene sus implicados, te hacen usar el Project, asignar recursos, truquitos para saber sacar los requisitos al cliente.
Y todo eso está genial, y estoy segura de que en algún lugar del mundo algo se usará, pero a la hora de la verdad, si eres programador en un sitio normalito (como yo, que tan solo es una multinacional con 1200 personas solo en España):
- Te dirán que hay un problema.
- Te dirán que lo estudies (fase de requisitos).
- Y que lo desarrolles (fase de implementación).
Juan Palomo, yo me lo guiso, yo me lo como. Puedes hacer un diseño si el desarrollo no es muy urgente, pero la realidad es que te pondrás a programar directamente y de ahí, irás sacando dudas y metiendo la gamba mil veces hasta dejar algo parecido a lo que querían.
También me ha pasado que te den los requisitos en un papel a mano, en el que te han ido explicando de palabra lo que querían. O que una vez pones en producción un proyecto ya firmado como válido por quien lo pedía, luego te llama para decirte que lo que le has hecho no tiene nada que ver con lo que quería y no le sirve una mierda.
Es como si un albañil se construyera una casa él solo, sin arquitecto, ni planos, ni nada.
Aprender en 20 días:
Y sin cursillo, por tu cuenta. Y en plenos exámenes. Cojonudo.
Ah, y luego aplicarlo y en 10 9 días, hacer un desarrollo.