Merhaba Hugo,
Sorunuz: Sadece başlık, icerik ve id olmak üzere 3 alanımız olsun ve sorguda 3'ü de ihtiyaç durumunda. Her iki şekil de kullanılabilir durumda ( Select * from, select id,baslik,icerik from ). Bu şekilde ele alırsak sunucu üzerinde oluşturacakları yükler arasında farklılık oluyor mu ?
Hayır bu durumda bir fark olmaz. Veritabanı kendi içinde * ı zaten tektek alan adlarına dönüştürür. Bu işlemi veritabanı optimizeri yapar.
Aslında genellikle "select * from tablo where a=x, b=y" ile "select c,d from tablo where a=x, b=y" arasında performans bakımından hissedilmeyecek kadar az, belkide mikro saniyenin binde biri kadar fark vardır.
İstisna durumlar: Tablodaki alan sayıları çok fazla ise ve birsürü text alan varsa. Örneğin 250 alanlı bir tablo ve 200 alanı text ve büyük varchar verilerden oluşsun. Bu durumda boşu boşuna bu kadar veriyi çekmenin bir manası yok. Bu gereksiz veriler mysql lokal makinada ise I/O haricinde yine çok sorun yaratmaz, ancak mysql makinanız webserver dan ayrı yerde ise bu veri hem I/O hem de network paketleri ile taşınacağı için sonuç gecikmeli gelir. Gecikme zincirleme performans sorunu yaratabilir. Anlık httpd sayısı artar ve Apache yavaşlar, bellekte yer kalmaz, Swapping başlar vb...
Yukarıda bahsettiğimiz gibi "best practices" işin içine girdiğinde her zaman sadece gerekli alanları sorgulamak doğru olanıdır.
Sorgularda asıl dikkat edilecek husus WHERE den sonra gelen alanların indeksli olmasıdır. Doğru indexlenmiş bir tablo sorgularda binlerce kat daha hızlı dönüş sağlayabilir.