|
Тема |
Re: ????????? ?? ???????????? - MySQL only [re: hrisunko] |
|
Автор |
salle (Един такъв) |
|
Публикувано | 10.09.01 14:32 |
|
|
Въпросът е доста по дебел (и съответно интересен)
А именно когато става въпрос за тежък SELECT
Да кажем select без limit ти връща 100 000 реда
Проблем N1,
LIMIT $x, $y където $x и $y ги заместваш в движение с next10, prev10 е съвсем очевидно:
print"<a href=$PHP_SELF?x=$x&y=$y ....
Обаче това означава, че при всяко Next, Prev MySQL ще изпълнява пълния SELECT т.е. всичките 100 000 реда само ще ти връща x,y
Проблем N2
Ако искаш да сложиш нещо в стил:
Records 20-30 from 100 000
ще трябва да изпълниш SELECT-а 2 пъти
1. select count(*) from ... where .....;
2. select .... where ... limit x, y;
Така, че нещата стават доста дебели
Предложение:
Временна таблица. Т.е. кеширане на SELECT-а
Само, че в случая не може да се използва TEMPORARY TABLE на MySQL защото тя важи само за текущия PHP дори да се използва mysql_pconnect()
Та предложението ми е:
1-во извикване на страницата
генерираш нещо случайно, уникално и т.н. като име на таблица
$cache_tbl = '?????';
create table $cache tbl select .... тук следва пълния SELECT който искаш да търкаляш напред назад
select count(*) from $cache_tbl;
Оттук вече имаш Броя Редове Които Връща Твоя Оригинален SELECT
2. select * from $cache_tbl limit $x, $y;
И във <Prev><Next> предаваш $cache_tbl, $x, $
При което, оригиналната таблица се SELECT-ва еднократно, т.е. избягва се LOCK-ването и и освен това печелиш доста скорост.
Остава за решаване един (дребен :))) ) проблем:
Трябва да пазиш някъде списък на така създадените временни таблици и отвреме на време да ги триеш.
Щото това да прихванеш кога потребителя "Излиза" от страницата както всички знаем в HTML хич не е възможно
Linux is like a wigwam - No Windows, No Gates, Apache inside
|
| |
|
|
|