[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как заКЭШировать запрос
steep
biggrin.gif привет всем!

у меня есть такой вопросик как заКЭШировать запрос

PHP
$res  =  mysql_query("SELECT COUNT(*) FROM messages WHERE receiver = " $CURUSER["id"] . " AND unread='yes'") or die("OopppsY!");




Спустя 8 минут, 18 секунд (17.06.2009 - 21:04) kirik написал(а):
Запрос али ответ на запрос? wink.gif

PHP
$num mysq_result($res0);
file_put_contents('./cache/num.cache'$numLOCK_EX);


Например так?

Спустя 4 минуты, 58 секунд (17.06.2009 - 21:09) steep написал(а):
да спасибо =)

Спустя 11 часов, 14 минут, 57 секунд (18.06.2009 - 08:24) glock18 написал(а):
только смысл? запрос не выглядит сложным smile.gif

Спустя 3 часа, 46 минут, 14 секунд (18.06.2009 - 12:11) steep написал(а):
ну я начинающий как бы

Спустя 7 часов, 10 минут, 7 секунд (18.06.2009 - 19:21) kirik написал(а):
Цитата (glock18 @ 18.06.2009 - 00:24)
только смысл? запрос не выглядит сложным

Ну смотря как посмотреть smile.gif Обычно быстро обрабатывается подсчет без условия WHERE, потому что он берется..откуда-то из данных статистики самой таблицы. А когда ты ставишь WHERE, то строчки в прямом смысле считаются. И тут уже грамотность индексированния таблицы влияет на скорость выборки. Нет индексов - получишь нагрузку, есть - замечательно, разгрузишь БД smile.gif

Спустя 7 минут, 27 секунд (18.06.2009 - 19:28) sergeiss написал(а):
Цитата (kirik @ 18.06.2009 - 20:21)
Нет индексов - получишь нагрузку, есть - замечательно, разгрузишь БД

Подтверждаю: разница во времени запроса с индесками и без них может составлять десятки, и иногда сотни раз. Самолично походил немного по этим граблям smile.gif

Спустя 38 минут, 52 секунды (18.06.2009 - 20:07) steep написал(а):
т.е вы хотите скахать что хдесь ненадо кешировать т.к есть WHERE?

Спустя 8 минут, 4 секунды (18.06.2009 - 20:15) kirik написал(а):
steep
Еще раз перечитай smile.gif
Цитата (kirik @ 18.06.2009 - 11:21)
Обычно быстро обрабатывается подсчет без условия WHERE


Спустя 6 минут, 32 секунды (18.06.2009 - 20:22) steep написал(а):
ой ,kirik, сорри промахнулся =)

А теперь таков вопрос rolleyes.gif как такой запрос реализовать ?

Спустя 26 минут, 15 секунд (18.06.2009 - 20:48) kirik написал(а):
Цитата (steep @ 18.06.2009 - 12:22)
как такой запрос реализовать ?

Всмысле без WHERE? Может удивлю, но вот так:
SQL
SELECT COUNT(*) FROM messages

smile.gif Просто если ты используешь WHERE, то тебе нужно подсчитать кол-во записей попадающих под определенное условие, тоесть без этого условия запрос будет бесполезен. Следовательно в твоем случае лучше кэшировать. А вообще, если ты очень начинающий, то советую не заморачиваться насчет этого. Навыки по оптимизации sql запросов (так и php кода) придут сами, по мере накопления опыта.

Спустя 1 минута, 36 секунд (18.06.2009 - 20:49) glock18 написал(а):
Цитата (kirik @ 18.06.2009 - 16:21)
Ну смотря как посмотреть smile.gif Обычно быстро обрабатывается подсчет без условия WHERE, потому что он берется..откуда-то из данных статистики самой таблицы. А когда ты ставишь WHERE, то строчки в прямом смысле считаются. И тут уже грамотность индексированния таблицы влияет на скорость выборки. Нет индексов - получишь нагрузку, есть - замечательно, разгрузишь БД smile.gif


дк я знаю. но, по-моему, проще добавить один индекс, чем кешировать количество сообщений для каждого юзера. разумеется, если не добавлять индексы, а базе будет 1890813890890 сообщений, то если сервер не накроется при двух одновременных запросах, это будет очень круто. правда тормозить все равно будет жестко...

ну как-то странно все равно выглядит - такой запросик кэшировать. ну все равно что топором заусенец рубить. мне кажется smile.gif

Спустя 3 минуты, 38 секунд (18.06.2009 - 20:53) steep написал(а):
smile.gif понятно

Спустя 4 минуты, 52 секунды (18.06.2009 - 20:58) kirik написал(а):
glock18
Много индексов тоже вредно. Возьмем таблицу с 2 000 000 записей. Представь, если индексируемое поле будет размером 1 байт, то при его индексировании получим около +2 мб данных на таблицу. А если мы закэшируем этот запрос, то получим файл весом не более 7 байт. Но и это еще не все. Лишние индексы несколько усложняют удаление строк и изменение индекированного поля. Тоесть если ты послал запрос на удаление строки, то будет удалятся строка не только из основной таблицы, но и из таблицы индекса, так же будет происходить с изменением индексированного поля.

Хотя наверняка ты это все знаешь cool.gif

Спустя 3 минуты, 28 секунд (18.06.2009 - 21:01) steep написал(а):
ага biggrin.gif
не много понял конешно =)

Спустя 1 минута, 59 секунд (18.06.2009 - 21:03) glock18 написал(а):
steep
лучше не парься с кэшированием здесь. а добавь индекс на поля, по которым ведешь поиск (WHERE и ORDER BY клаузы). здесь у тебя такое поле - id пользователя.

Спустя 6 минут, 9 секунд (18.06.2009 - 21:10) glock18 написал(а):
Цитата (kirik @ 18.06.2009 - 17:58)
Тоесть если ты послал запрос на удаление строки, то будет удалятся строка не только из основной таблицы, но и из таблицы индекса, так же будет происходить с изменением индексированного поля.


Да, конечно, происходит перестраивание индексов. в myisam кстати есть механизм отложенных инсертов для таких вещей. иногда, пожалуй, может пригодиться. ну и для таких дел, я предпочитаю удалять, вставлять, обновлять (с затрагиванием индексов если) записи одним запросом - тогда только одно перестраивание делается. если в один запрос это все не сводить, то получится... получится, конечно, не очень хорошо smile.gif

Ну хоть убейте biggrin.gif Я понимаю, что кэшировать запросы можно и НУЖНО, но не могу без содрогания видеть как кэшируют запрос по количеству непрочтенных сообщений (и т.п.). как представить сколько таких файлов будет валяться (ну или просто памяти - если говорить о кэшировании eaccelerator, apc и т.п.) - а в сумме они огого будут smile.gif да еще наверно по такому файлу для... групп скажем (если соц сеть взять к примеру). это же пруд пруди файлов... rolleyes.gif

Ну хоть убейте... Не пойму такого подхода biggrin.gif

Спустя 10 минут, 25 секунд (18.06.2009 - 21:20) kirik написал(а):
Цитата (glock18 @ 18.06.2009 - 13:10)
но не могу без содрогания видеть как кэшируют запрос по количеству непрочтенных сообщений (и т.п.)

Да, тут конечно зависит от того что нужно кэшировать. В приведенном тобой примере о непрочитанных сообщений кэшировать абсолютно не нужно, информация о сообщениях должна храниться в табличке с юзерами (например в поле unread_msgs). А вот взять такой пример - есть некоторое количество новостей, и есть вывод этих новостей по страницам. Чтобы каждый раз не пересчитывать общее количество новостей (для того чтобы посчитать сколько страниц новостей будет) то такую информацию можно и закэшировать минут на 5-10..

Спустя 1 минута, 37 секунд (18.06.2009 - 21:22) kirik написал(а):
АА! Пардон, я сдурил smile.gif Не вникал в запрос ТС, конечно, тут не нужно кэшировать ничего! smile.gif
steep
почитай предыдущий пост, или еще проще: вообще не парься, и сделай как glock18 сказал:
Цитата (glock18 @ 18.06.2009 - 13:03)
добавь индекс на поля, по которым ведешь поиск (WHERE и ORDER BY клаузы). здесь у тебя такое поле - id пользователя.

Спустя 9 минут, 49 секунд (18.06.2009 - 21:31) glock18 написал(а):
Цитата (kirik @ 18.06.2009 - 18:22)
АА! Пардон, я сдурил smile.gif Не вникал в запрос ТС, конечно, тут не нужно кэшировать ничего! smile.gif


я щас чуть слезу не пустил от эмоций biggrin.gif (преувеличиваю, конечно smile.gif но не стебусь)

Цитата (kirik @ 18.06.2009 - 18:20)
Да, тут конечно зависит от того что нужно кэшировать. В приведенном тобой примере о непрочитанных сообщений кэшировать абсолютно не нужно, информация о сообщениях должна храниться в табличке с юзерами (например в поле unread_msgs). А вот взять такой пример - есть некоторое количество новостей, и есть вывод этих новостей по страницам. Чтобы каждый раз не пересчитывать общее количество новостей (для того чтобы посчитать сколько страниц новостей будет) то такую информацию можно и закэшировать минут на 5-10..


здесь согласен на все много процентов. количество новостей даже можно и безлимитно кэшировать - просто нужно чистить кэш, когда их количество изменяется.

Спустя 1 минута, 41 секунда (18.06.2009 - 21:33) glock18 написал(а):
У меня сегодня прям день дискуссий на тему sql. smile.gif

Спустя 13 минут, 40 секунд (18.06.2009 - 21:47) kirik написал(а):
Цитата (glock18 @ 18.06.2009 - 13:33)
У меня сегодня прям день дискуссий на тему sql

Эт хорошо smile.gif "В споре рождается истина" smile.gif Значит истина - гриб smile.gif

Спустя 3 минуты, 31 секунда (18.06.2009 - 21:50) glock18 написал(а):
Цитата (kirik @ 18.06.2009 - 18:47)
Цитата (glock18 @ 18.06.2009 - 13:33)
У меня сегодня прям день дискуссий на тему sql

Эт хорошо smile.gif "В споре рождается истина" smile.gif Значит истина - гриб smile.gif

да, это точно. заодно стараниями sergeiss я учу postgre, сам к тому не прилагая усилий smile.gif надо постгре выучить, чтобы можно было че-нибудь умное хоть сказать, когда его дело касается smile.gif

Спустя 2 минуты, 52 секунды (18.06.2009 - 21:53) kirik написал(а):
Хаа))) Товарищ sergeiss скоро всех на postgre пересадит smile.gif

Спустя 7 минут, 16 секунд (18.06.2009 - 22:00) sergeiss написал(а):
Цитата (kirik @ 18.06.2009 - 22:53)
Товарищ sergeiss скоро всех на postgre пересадит

Скорее "подсадит", а не "пересадит" biggrin.gif

А мне придёЦЦа, наверное, MySQL подучить немного. Чтобы хоть сравнивать можно было эти две БД.

Цитата (glock18 @ 18.06.2009 - 22:50)
я учу postgre, сам к тому не прилагая усилий

Э, нет, батенька! ПотрудиЦЦа придёЦЦа wink.gif Там, в Постгре, еще очень много-много интересного.

Спустя 1 минута, 20 секунд (18.06.2009 - 22:02) glock18 написал(а):
Цитата (kirik @ 18.06.2009 - 18:53)
Хаа))) Товарищ sergeiss скоро всех на postgre пересадит smile.gif

Что правда то правда. сижу себе пишу на mysql. ну слышал, что есть такой postgre, который тоже очень популярен в среде php. а тут еще узнаю, что там distinct круче, чем в mysql (может еще много чего круче, кто знает). вот теперь и правда... "пересадит" smile.gif

ну и спасибо ему, что вот появляется желание в нем покопаться. без желания и не сядешь, пока нужда не прижмет. а так - когда она прижмет, уже готов будешь smile.gif

Спустя 2 минуты, 33 секунды (18.06.2009 - 22:04) glock18 написал(а):
Цитата (sergeiss @ 18.06.2009 - 19:00)
Э, нет, батенька! ПотрудиЦЦа придёЦЦа wink.gif Там, в Постгре, еще очень много-много интересного.


ну воот. больше не будешь мне рассказывать постгре? smile.gif значит придется погонять его самому.

* сбегал за документацией по postgre в гугл *
ну вот я уже знаю, что там есть подготовленные запросы и процедуры - значит изучение оправдывает себя smile.gif

Спустя 16 минут, 9 секунд (18.06.2009 - 22:20) sergeiss написал(а):
glock18! А вот чтобы тебя совсем уж "обратить в правильную веру" laugh.gif laugh.gif laugh.gif я приведу только оглавление из хэлпа по Постгре, глава про типы данных.
Тут мало того, что куча уже готовых типов данных, так ты можешь создавать свои, пользовательские типы данных, примерно как struct в Си...

И сравни, сколько там типов данных в MySQL???
Код
Chapter 8. Data Types
Table of Contents

8.1. Numeric Types
8.1.1. Integer Types
8.1.2. Arbitrary Precision Numbers
8.1.3. Floating-Point Types
8.1.4. Serial Types
8.2. Monetary Types
8.3. Character Types
8.4. Binary Data Types
8.5. Date/Time Types
8.5.1. Date/Time Input
8.5.2. Date/Time Output
8.5.3. Time Zones
8.5.4. Internals
8.6. Boolean Type
8.7. Enumerated Types
8.7.1. Declaration of Enumerated Types
8.7.2. Ordering
8.7.3. Type Safety
8.7.4. Implementation Details
8.8. Geometric Types
8.8.1. Points
8.8.2. Line Segments
8.8.3. Boxes
8.8.4. Paths
8.8.5. Polygons
8.8.6. Circles
8.9. Network Address Types
8.9.1. inet
8.9.2. cidr
8.9.3. inet vs. cidr
8.9.4. macaddr
8.10. Bit String Types
8.11. Text Search Types
8.11.1. tsvector
8.11.2. tsquery
8.12. UUID Type
8.13. XML Type
8.13.1. Creating XML Values
8.13.2. Encoding Handling
8.13.3. Accessing XML Values
8.14. Arrays
8.14.1. Declaration of Array Types
8.14.2. Array Value Input
8.14.3. Accessing Arrays
8.14.4. Modifying Arrays
8.14.5. Searching in Arrays
8.14.6. Array Input and Output Syntax
8.15. Composite Types
8.15.1. Declaration of Composite Types
8.15.2. Composite Value Input
8.15.3. Accessing Composite Types
8.15.4. Modifying Composite Types
8.15.5. Composite Type Input and Output Syntax
8.16. Object Identifier Types
8.17. Pseudo-Types

Спустя 4 минуты, 35 секунд (18.06.2009 - 22:25) glock18 написал(а):
даааа... весьма впечатляет smile.gif как диплом защищу, так сразу и сяду с постгре поработать

Спустя 19 часов, 42 минуты, 2 секунды (19.06.2009 - 18:07) steep написал(а):
biggrin.gif ну расфлудились тут

Спустя 1 час, 55 минут, 54 секунды (19.06.2009 - 20:03) Sylex написал(а):
Цитата (kirik @ 19.06.2009 - 00:53)
Хаа))) Товарищ sergeiss скоро всех на postgre пересадит smile.gif

laugh.gif laugh.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.