powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / флаги как фильтр-кеши
26 сообщений из 26, показаны все 2 страниц
флаги как фильтр-кеши
    #39059850
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим у нас есть сложный запрос

Код: sql
1.
2.
3.
4.
select * from t 
     where a = '...' && b = '...' && c = '...' && ... && n = '...' 
     order by cdate desc 
     limit 30



Таблица 8,5 млн. записей.
Результат этого запроса без лимита 87694 записи.

На основе логов мы вдруг видим, что у нас в 18% случаев этих запросов комбинация a = 'someA' && c = 'someC' && f = 'someF' && u > someU повторяется, а другие параметры меняются.

Чтобы ускорить этот вид запросов мы создаем фильтр-флаг fif_1 bool not null, index _fif_1 (fif_1) и в момент записи (сохранения, апдейта) в эту таблицу мы пишем результат логического выражения этого условия

Код: sql
1.
set fif_1 = (a = 'someA' && c = 'someC' && f = 'someF' && u > someU)



и теперь билдер sql-запросов, когда встречает эту комбинацию в запросе, то заменяет её на fif_1 = 1

вопрос: есть ли смысл в подобных заманухах или это все от лукавого?

- - -

Два вопроса в этом же контексте:

вопрос 1.a
существует ли реальный смысл вместо

Код: sql
1.
select * from t where fif_1 = 1 && x = 'someX' limit 30



делать через вложенный запрос, чтобы исключить операции x = 'someX' на заведомо лишних записях

Код: sql
1.
2.
3.
4.
select * 
     from (select * from t where fif_1 = 1) a 
     where x = 'someX' 
     limit 30



или само расположение fif_1 = 1 первым условием в where-секции уже дает такую гарантию?
или может быть такие вещи мускул вообще сам умеет додумывать что лучше ставить первым, а что вторым???

вопрос 2.a

есть ли смысл создавать

Код: sql
1.
create view fif_1_view as select * from t where fif_1 = 1



и юзать его вместо вложенного запроса?
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059859
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

1. Вряд ли вы этим что-то выиграете. Разве что у этих 18 % крайне сверхостро стоит проблема времени выполнения, пусть и с ущербом для всего остального. А так вы получаете дополнительный индекс, который тоже нужно уместить в буферный кэш. Если кэша не хватает, то остальные объекты будут чаще из него вымываться, что нехорошо.

1.а Нет, смысла нет. Такие вещи решаются правильным порядком полей в индексе.

2.а Нет, смысла тем более нет. Добавляется опасность материализации view. Кроме того, не уверен, что индекс подхватится, если часть предикатов будет во view, а другая часть в самом запросе.
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059863
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
огромное спасибо за все три ответа!!

вот эту фразу только не понял...

miksoftТакие вещи решаются правильным порядком полей в индексе.


правильный порядок полей в индексе???? индекс - это что-то, содержащее порядок полей???.... я думал индекс - это такая шняга, которая вешается на каждое поле отдельно для ускорения поиска... или есть ещё какие-то индексы, которые сразу по нескольким полям формируются что ли???
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059883
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixи теперь билдер sql-запросов, когда встречает эту комбинацию в запросе, то заменяет её на fif_1 = 1
это вам кто сказал?
Если бы вы сделали вычисляемое поле, - то да, у оптимизатора была бы возможность свернуть 4 проверки разных полей в проверку одного вычисляемого поля, да и то не факт что на это хватило бы времени.

Но в MySQL вычисляемых полей нет, поэтому замену 4х проверок на одну вам придется делать самостоятельно. Насколько я понял, вы хотите как раз автоматизации замены - тогда ответ "нет".

По той части вопроса, в которой вы хотите комбинировать условия фильтра - оптимизатор строит план выполнения запроса на основе кучи статистических данных о содержимом таблиц, и вполне может не согласиться с заявленным в запросе порядком обработки, посчитав его более затратным по ресурсам, и выполнив "свой" вариант обработки. Именно поэтому SQL является деклартивным, а не операционным языком: в запросе указывается, что требуется сделать.
Как сделать затребованное оптимальным с точки зрения ресурсов сервера способом - определяет сама СУБД.

Это же справедливо и при использовании VIEW: определение VIEW подставляется в соответствующее место запроса, и уже после этого производится построение оптимального плана выполнения "развернутого" запроса (да еще и время на построение плана ограничено).

Конечно, понимая механизм формирования плана выполнения, можно попытаться помочь серверу, например, создавая дополнительные индексы по одному или нескольким полям, - но даже при их наличии оптимизатор может, например, посчитать, что при хранящихся сейчас в таблице данных стоимость полного перебора таблицы будет дешевле поиска в индексе, и отказаться от использования индекса при обработке запроса.
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059885
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007поэтому замену 4х проверок на одну вам придется делать самостоятельно. Насколько я понял, вы хотите как раз автоматизации замены - тогда ответ "нет".


ложная тревога
все юнитам вернуться в места постоянной дислокации)))

речь идет об sql-билдере на клиенте
сам сервак получает уже либо, либо
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059900
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixправильный порядок полей в индексе???? индекс - это что-то, содержащее порядок полей???.... я думал индекс - это такая шняга, которая вешается на каждое поле отдельно для ускорения поиска... или есть ещё какие-то индексы, которые сразу по нескольким полям формируются что ли???В индексе может быть много полей. И даже в одноколоночном индексе по факту, как минимум, два поля - проиндексированное поле и поле/поля первичного ключа (в случае InnoDB).
В своих ответах я полагал, что правильные многоколоночные индексы уже созданы и сравнение идет с ними.
Если же нет, то, имхо, стоит заняться именно этим.
См. Optimization and Indexes
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059906
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВ своих ответах я полагал, что правильные многоколоночные индексы уже созданы и сравнение идет с ними.
Если же нет, то, имхо, стоит заняться именно этим.
См. Optimization and Indexes

Я посмотрел и немного запутался...
Сначала я прочитал статью Multiple-Column Indexes
http://dev.mysql.com/doc/refman/5.5/en/multiple-column-indexes.html

и подумал - о! уау, это круть...

но затем на stackoverflow оказалось, что индексы и ключи - это одно и то же
http://stackoverflow.com/questions/1401572/what-are-differences-between-index-v-s-key-in-mysql

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

например

Код: sql
1.
index some (car_brand, car_type)



и тогда в этой таблице может быть только одна запись с данными ('mercedes', 'coupe')
и тем самым, если будет насколько моделей мерседеса купе, то этот индекс просто не даст создать вторую и последующую запись...
может я что-то не так понял, про многоколоночные индексы?...
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059907
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixCygapb-007поэтому замену 4х проверок на одну вам придется делать самостоятельно. Насколько я понял, вы хотите как раз автоматизации замены - тогда ответ "нет".


ложная тревога
все юнитам вернуться в места постоянной дислокации)))

речь идет об sql-билдере на клиенте
сам сервак получает уже либо, либоСнимите уже мигалку с головы, больше на человека будете похожи.
Как раз самостоятельно вы замену и делаете - ну и на здоровье.

По 1.а - если индекс по Х более селективен, его логичнее использовать раньше отбора по fif_1, но селективность может ухудшаться (или улучшаться) при увеличении числа строк.
Именно об этом основная часть моего ответа.
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059909
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059920
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007Lumix,

Посмотрите Определяем порядок столбцов в составном индексе

Статья, прикольная!
Единственное, я не понял, индекс по (status,tries) как предлагает сделать автор вводит обязательность на уникальность этих пар или даже после установления этого индекса разрешается создавать любое количество записей с комбинацией (source = 'twitter', tries = 20)???

PS. прежде, чем отправить этот вопрос я подумал, что проще наверное создать таблицу и проверить самому...
создал, проверил, разрешает...
подумал, как так???
и тут я понял: miksoft пишет, что где-то в глубине каждый индекс уже содержит примарный кей, поэтому в таблице (id, a, b) создавая index i (a, b) мы по сути ВСЕГДА создаем индекс index i (id, a, b), а поскольку id всегда уникален, поэтому и можно создавать сколько угодно записей, где будет повторяться комбинация (a, b)...

круто...
только я теперь не совсем въехал, а как тогда объявить ключ, если я хочу реально поставить ограничение, чтобы в таблице всегда (a, b) была уникальной комбинацией и две записи с одинаковыми полями (a, b) создавать было бы невозможно????

а так круто, круто...
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059923
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007,

функция select sum(условие) from t - РЕАЛЬНО КРУТАЯ ШТУКА!!!
я так рад, что создал эту тему
не было бы этой темы, не узнал бы про такую нереально крутую приблудину!!
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059927
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007,

select sum(условие) / count(*) from t - это супер-мега-офигительный способ определения стоит создавать индекс по полю или нет!! чем ближе это значение к 100%, тем меньше смысла в создании индекса.
Просто реально крутой способ!!

В свете новой информации сейчас ищу инфу по двум вопросам:
1) когда мультиколоночный индекс выгоднее двух индексов по обоим колонкам
2) какой размер лучше всего задавать мультиколоночному индексу
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059929
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разобрался с уникальностью:

key (a, b) - создает индекс и эта комбинация может повторяться сколько угодно раз
unqiue key (a, b) - создает индекс, где эта комбинация становится уникальным ключом

все просто и прекрасно!!))
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059930
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix2) какой размер лучше всего задавать мультиколоночному индексу

ха-ха-ха
http://www.sql.ru/forum/1020884/v-chem-raznica-dliny-indeksa

видимо для мультиколоночных работают те же самые принципы, просто тут сразу несколько колонок
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059933
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix1) когда мультиколоночный индекс выгоднее двух индексов по обоим колонкам


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

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

типа так

Код: sql
1.
2.
-- тут используется либо индекс на а, либо на б, но не оба сразу
select * from t where a = 'someA' && b = 'someB' limit 30



Код: sql
1.
2.
-- а тут я не знаю, наверное сразу два индекса юзаются...
select * from (select * from t where a = 'someA') x where b = 'someB' limit 30
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059939
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixчто мускул в одном селекте может юзать только один индексПо одному для каждого табличного алиаса. Из этого правила уже есть исключение, в ряде случаев он научился делать INDEX MERGE для случаев WHERE field1=100 OR field2=234, правда, не помню, начиная с какой версии.
Первые попавшиеся ссылки на тему:
http://dev.mysql.com/doc/refman/5.5/en/index-merge-optimization.html
http://stackoverflow.com/questions/29054816/mysql-merge-index-optimization-not-working
http://jorgenloland.blogspot.co.uk/2012/10/index-merge-annoyances-fixed-in-mysql-56.html

Lumixименно поэтому, чтобы задействовать сразу несколько индексов и создаются многоколоночные индексыНет, не поэтому. Даже в тех случаях, когда теоретически возможно объединить индексы для отдельных колонок, использование одного готового многоколоночного индекса будет заметно быстрее (при условии, что его применение в принципе возможно для конкретного запроса).
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059943
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

а я почему-то думал, что пересечение индексов работает только для AND, типа есть intersect - и хватит...

А в доку лезть поленился :)

Спасибо:)
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39059971
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixединственное я сейчас пока не нашел ответа, считаются ли селект в селекте одним селектом или внутренний селект считается самостоятельным селектом и поэтому через вложенные селекты можно замутить в одном селекте использование двух индексов

Как мне представляется, на первом этапе компиляции запрос раскладывается на кирпичики элементарных действий, а затем, на втором этапе, оптимизатор, используя свой набор правил оптимизации, начинает корежить черновой план выполнения с учетом накопленной на момент оптимизации запроса статистики по индексам и значениям полей таблиц из запроса, добиваясь минимальной ожидаемой стоимости выполнения за отведенное на компиляцию запроса время. И сформированный в итоге план выполнения может значительно отличаться от ожидаемого при написании запроса. А может и совпадать, если статистика соответствует ожиданиям:)

Это я к тому, что предоставьте оптимизатору возможность выбора, добавив всевозможные индексы на этапе тестирования (самый простой, универсальный, но и самый медленный план, который можно выбрать практически всегда, - последовательное чтение всех строк таблицы в порядке извлечения их из хранилища). Но и не забывайте, что чем больше индексов - тем больше места требуется на диске и тем дольше изменения таблицы (все индексы нужно перестроить при каждом INSERT/DELETE, а некоторые и при UPDATE).

Предоставив всевозможные индексы, можно оценить поведение оптимизатора, разрешая или запрещая некоторые из созданных индексов через index_hint

При увеличении числа строк, а соответственно при изменении селективности созданных и возможных индексов, может появиться более оптимальный вариант выполнения запроса.

Хотя насчет оптимизатора MySQL - могу только предполагать...
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39060182
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixно блин, я вроде как всю жизнь думал, что мультиколоночный индекс - это такая шняга, которая контроллирует уникальность комбинации и запрещает несколько записей с этой комбинациейДумать - это, конечно, похвально... но документацию, *****, кто читать за вас будет?!
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39060216
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirLumixно блин, я вроде как всю жизнь думал, что мультиколоночный индекс - это такая шняга, которая контроллирует уникальность комбинации и запрещает несколько записей с этой комбинациейДумать - это, конечно, похвально... но документацию, *****, кто читать за вас будет?!

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

на самом деле, существует такой эффект (если не верите, можете проверить на себе)
читаем доку полностью
начинаем читать заново и удивляемся как много мы могли пропустить мимо внимания
заканчиваем читать второй раз и начинаем читать третий
и опять охреневаем, а это-то как мы могли пропустить мимо внимания??...
заканчиваем читать в третий раз
начинаем читать в четвертый
и снова найдя новые удивительные открытия вдруг понимаем, что сколько бы раз мы ни читали доку, все равно в ней останутся ВАЖНЫЕ места, которые мы пропустили мимо внимания

вывод: век живи, век учись
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39060275
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixна самом деле, существует такой эффектДа кто ж спорит, он существует. Но путать многоколоночные индексы с уникальными?
Lumixсколько бы раз мы ни читали доку, все равно в ней останутся ВАЖНЫЕ места, которые мы пропустили мимо вниманияЧто и КАК для этого надо было пропустить в доке?
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39060298
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пора уже переходить к практике...
1. установите MySQL локально для практики (в FAQ-е установка за 10 шагов...)
2. создайте таблицу для анализа использования индексов (допустим example с полями (id,) p1,p2,p3,p4,p5)
3. заполните данными 1-2 млн записей (лучше больше)
4. Создайте индексы как по каждому полю отдельно, так и составные допустим IDX123(p1,p2,p3) IDX12345(p1,p2,p3,p4,p5)
5. выполняя запросы с различными условиями, сделайте выводы.
для понимания выполнения запроса используйте "ПЛАН запроса", для этого перед SELECT добавьте "EXPLAIN"
в столбце "possible_key" увидите возможные для использования индексы, в графе "key" - используемый индекс
Lumixединственное я сейчас пока не нашел ответа, считаются ли селект в селекте одним селектом или внутренний селект считается самостоятельным селектом и поэтому через вложенные селекты можно замутить в одном селекте использование двух индексовпростой запрос в "базе для практике" (обзовем коротко БДП)
Код: sql
1.
EXAPLAIN SELECT t.* FROM (SELECT * FROM example WHERE p1='some1') AS t WHERE p3='some3'...

"свернется" из вложенного в один с использованием составного индекса IDX12345
Ну и так далее по шажочкам можно употреблять док-ю к практике...
Далее, произойдет осознание прочитанного:
- если у вас наиболее встречаемые параметры p1,p2,p3, в запросах то возможно выгоднее будет держать индекc IDX123 чем IDX12345
- одиночное WHERE p2="some2" будет прекрасно использовать IDX123 если нет отдельно IDX2(p2)
- и т.д.
в итоге оптимизатор выберет сам необходимый путь, вы лишь можете ему "помочь"

PS чтение правил дорожного движение не учит вождению автомобиля
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39060648
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft И даже в одноколоночном индексе по факту, как минимум, два поля - проиндексированное поле и поле/поля первичного ключа (в случае InnoDB).

На самом деле 3, а не 2 -- в конце ещё идёт версия записи. InnoDB же версионник...
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39060652
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirНо путать многоколоночные индексы с уникальными?
Lumixсколько бы раз мы ни читали доку, все равно в ней останутся ВАЖНЫЕ места, которые мы пропустили мимо вниманияЧто и КАК для этого надо было пропустить в доке?

Тут действует принцип постепенного стирания информации из памяти, если ей не пользоваться постоянно.
Самый популярный пример - это словарный запас английского языка.
Как бы круто кто не владел языком, если им не пользоваться регулярно, то словарный запас стирается.
Вот у меня с mysql и многими другими вещами так же.
Когда-то я очень хорошо многие вещи знал, но поскольку я не пользуюсь такими глубокими вещами каждый божий день, то естественно постепенно многие ньансы стираются.
Точно так же как и с английским языком.
Когда-то я владел им в совершенстве на уровне upper intermediate, но сегодня на этот уровень без подготовки я не сдам, хотя свободно общаюсь на английском, когда мне это потребуется.
Точно так же и с мускулом.
Я им более-менее свободно владею, но вот на upper-intermediate по мускулю не сдам.
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39060654
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix вывод: век живи, век учись

Ты переведи вопрос в практическое русло.
Во-первых, вместо
Код: plaintext
1.
 a = 'someA' && c = 'someC' && f = 'someF' && u > someU 

надо писать
Код: plaintext
1.
 a = 'someA' and c = 'someC' and f = 'someF' and u > someU 

Далее, на

Код: plaintext
1.
2.
 
a = 'someA' && c = 'someC' && f = 'someF' && u > someU 

создаём индеск (a, c, f, u) (именно в таком порядке! Хотя тут можно менять местами a,c,f произвольно, но u должно быть в конце)-- и не нужно поле fif.

На частые условия помимо данного тоже можно создать индексы, которые включают сначала это условие,
а затем другие. Но каждый случай набора условий нужно рассматривать отдельно. Ты можешь выявить частоту сложных запросов,
и начать по ним идти и оптимизировать. Для этого есть --slow-query-log
...
Рейтинг: 0 / 0
флаги как фильтр-кеши
    #39060725
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivна

Код: plaintext
1.
2.
 
a = 'someA' && c = 'someC' && f = 'someF' && u > someU 

создаём индеск (a, c, f, u) (именно в таком порядке! Хотя тут можно менять местами a,c,f произвольно, но u должно быть в конце)-- и не нужно поле fif.


нее, тут мысль не такая была...

индекс стоит городить когда у нас

Код: sql
1.
a = '(какое-то значение)' && c = '(какое-то значение)' && f = '(какое-то значение)' && u > (какое-то значение) 




а fif предлагается ввести, когда у нас есть запросы с точным значением

Код: sql
1.
a = '(конкретное значение)' && c = '(конкретное значение)' && f = '(конкретное значение)' && u > (конкретное значение) 



для случаев типа таких

Код: sql
1.
a = '(конкретное значение)' && c = '(конкретное значение)' && f = '(конкретное значение)' && u > (конкретное значение) && s = '(какое-то значение)' && j = '(какое-то значение)' && k > (какое-то значение)



и введя fif предлагается на клиенте перед отправкой на выполнение заменять вот на такой запрос

Код: sql
1.
fif = true && s = '(какое-то значение)' && j = '(какое-то значение)' && k > (какое-то значение)



вот про че была речь-то...
(хотя в этом топике очень много про чё уже ещё была речь))))... но конкретно про fif суть была именно в этом)
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / флаги как фильтр-кеши
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]