[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Индексы sql
Страницы: 1, 2, 3
FatCat
Но есть и проблема. А именно, время добавления новой записи.
$sql = "INSERT INTO table (domen,time) VALUES ('".$link."', ".time().")";
При двух простых индексах операция занимала меньше 0.001 секунды, при составном индексе она занимает 0.01 секунды, и я так понимаю, будет быстро расти мо мере разрастания таблицы.

_____________
Бесплатному сыру в дырки не заглядывают...
Guest
Цитата (FatCat @ 8.03.2016 - 13:14)
При двух простых индексах операция занимала меньше 0.001 секунды, при составном индексе она занимает 0.01 секунды, и я так понимаю, будет быстро расти мо мере разрастания таблицы.

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

Конкретно твой случай легко решается в postgres использованием частичного индекса.
T1grOK
P.S. Что ж за день, я сегодня как в гостях на форуме smile.gif

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Миша
Цитата (sergeiss @ 8.03.2016 - 09:44)
Выбираешь ту единственную запись и смотришь, какое у неё время. В этом случае, кстати, может быть нужно просто пересмотреть структуру БД?

Сами учили решать такие задачи на уровне DB :)

mysqli_num_rows(mysqli_query($link, "SELECT * FROM `table` WHERE `id пользователя` AND `время` > NOW() - INTERVAL 5 MINUTE");


_____________
Принимаю заказы, писать в ЛС
sergeiss
Цитата (Медведь @ 9.03.2016 - 08:26)
Сами учили решать такие задачи на уровне DB :)

Ну так я и не отказываюсь от своих слов ;) Тока тебе что ни предложи, ты всё сомневаешься. Вот уж и предлагаю разные варианты.

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

SELECT * FROM 
(
SELECT * FROM `table` WHERE `id пользователя`
) ini_sel
WHERE `время` > NOW() - INTERVAL 5 MINUTE"

Индекс по айди должен быть использован при работе подзапроса, а для выборки по времени никакой индекс уже не нужен - подзапрос вернет всего одну строку или ни одной. То есть, индекс по времени тебе вообще не надо создавать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
Цитата (sergeiss @ 9.03.2016 - 10:13)
Кстати говоря, можно вот так вот извращнуться с запросом

Действительно извращнуться, бесполезное действие с подзапросом.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Миша
Я уже на обе колонки поставил, когда таблица вырастет, сделаю эксперимент )) А пока так пусть будет.

_____________
Принимаю заказы, писать в ЛС
sergeiss
Цитата (T1grOK @ 9.03.2016 - 14:45)
бесполезное действие с подзапросом

Ну не скажи. Если мы делаем сразу 2 условия, то они должны проверяться одновременно. И тут мы или используем индекс по айди, а по времени анализируется "как есть", т.е. последовательно. Или же мы делаем индекс по 2-м полям сразу - но Медведь не хочет.
В этом же случае в подзапросе время никак не фигурирует, не анализируется, выборку анализ времени не тормозит.
Вообщем, надо проводить натурные испытания для сравнения скоростей smile.gif

Цитата (Медведь @ 9.03.2016 - 14:50)
Я уже на обе колонки поставил

На обе - это составной индекс ты имеешь ввиду?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
Цитата (sergeiss @ 9.03.2016 - 10:53)
Ну не скажи. Если мы делаем сразу 2 условия, то они должны проверяться одновременно. И тут мы или используем индекс по айди, а по времени анализируется "как есть", т.е. последовательно.

Без разницы. Ты вытащил из индекса id пользователей, но чтобы проверить данные времени, каждая строка с диска, так или иначе будет считана для проверки.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Миша
Цитата (sergeiss @ 9.03.2016 - 14:53)
Или же мы делаем индекс по 2-м полям сразу - но Медведь не хочет.

На обе - это составной индекс ты имеешь ввиду?

Как это не хочу, сделал уже.

Ага.

_____________
Принимаю заказы, писать в ЛС
sergeiss
Цитата (T1grOK @ 9.03.2016 - 15:02)
Без разницы. Ты вытащил из индекса id пользователей, но чтобы проверить данные времени, каждая строка с диска, так или иначе будет считана для проверки.

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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
Цитата (sergeiss @ 9.03.2016 - 11:32)
Сначала подзапрос вытащит те строки, которые соответствуют условию по айди...

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

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
P.S. Кстати в случае с подзапросами, если это Mysql, нужно быть очень осторожным, так как подобные вещи оптимизатор часто обрабатывает неадекватно, поэтому подзапросы являются очень слабой стороной данной СУБД.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
GET
Какое-то безумие творится-не понимаю что вы обсуждаете. Аж мозги кипят так пытаюсь понять что я не понимаю что вы такое понимаете! user posted image

Вроде все кажется очевидным, ан нет! Три страницы (три!!!) обсуждается задача выборки из таблицы с уникальным первым ключом в запросе.


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
T1grOK
GET
Ты еще внес свою лепту в теме сообщением)
Нас хлебом не корми, дай что нибудь пообсуждать и поспорить smile.gif

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Быстрый ответ:

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