ТС, при чём тут вообще IP?
kvins, вы наверное отстали от современной жизни и новостей о железе. Сейчас не IBM 386, а 16 ядерные "ДУРЫ" каждое из которых по 3,6 ГГЦ. А жестаки в RAID, даже не SSD, просто летают. И ваши 10 выборок, это 0,00001 секунда.
Так же не забывайте, что везде стоят кэши:
1. Кэш на запросы в мускуль
2. Кэш PHP файлов
3. Кэш самих страниц полностью
Почему?
10 почему :)
-1 к карме :D
http://www.mysql.ru/webboard/index.html?n1=2937&n2=2
т.е. никаких ограничений нет. А такие базы используются, даже на очень крупных сайтах. 1 ГБ это нормальная база варезника, которому года 3-4 :)
Ну и что что 40 столбцов то? Иногда это лучше, чем 10 JOIN. Хотя ДА, по правилам БД это не правильно... все данные должны быть по разным табличкам, у них должен быть ID, может быть даже составной и он должен все таблички собирать в 1 уникальную и не ДАЙ боже будет, где дублирование данных, лабу не зачтут 😂
kvins, никакой оптимизации вам не надо. Главное проставьте индексы, где надо и всё.
Когда у вас будет база весить более 5 ГБ и там будет более 10 млн. записей, ну можно подумать, чтобы её лишний раз не тревожить :)
Сначала считывайте в переменную $mass все ID из таблицы запросом.
//Потом делайте:
array_shift($mass); //Это перемешает массив.
//Потом выбираем ID
for($i=0;$i<СКОЛЬКО_НУЖНО;$i++)
{
$tmp=$mass[$i];
}
//Теперь через запятую их складываем
$zap=implode(',',$tmp);
//И делаем запрос, вместо rand()
.... WHERE id IN ($zap)....
Теперь у нас в ответке будет сколько нужно случайных строк.
Исправлено.
хотя можно даже без цикла...
Просто берёте все ID в массив, перемешиваете и берёте первых 3-10 элемента.
:)