Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) 1 2 [3]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Индексы sql
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5903
Пользователь №: 1
На форуме: 10 лет, 9 месяцев, 25 дней
Карма: 125

Не пью :
22 года, 2 месяца, 27 дней


Но есть и проблема. А именно, время добавления новой записи.
$sql = "INSERT INTO table (domen,time) VALUES ('".$link."', ".time().")";
При двух простых индексах операция занимала меньше 0.001 секунды, при составном индексе она занимает 0.01 секунды, и я так понимаю, будет быстро расти мо мере разрастания таблицы.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









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

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

Конкретно твой случай легко решается в postgres использованием частичного индекса.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 17 дней
Карма: 170




P.S. Что ж за день, я сегодня как в гостях на форуме smile.gif


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Медведь  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2482
Пользователь №: 37963
На форуме: 3 года, 3 месяца, 24 дня
Карма: 27




Цитата (sergeiss @ 8.03.2016 - 09:44)
Выбираешь ту единственную запись и смотришь, какое у неё время. В этом случае, кстати, может быть нужно просто пересмотреть структуру БД?

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

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


--------------------

Заходил 29.09.2016
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14966
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 27 дней
Карма: 443




Цитата (Медведь @ 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
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 17 дней
Карма: 170




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

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


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Медведь  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2482
Пользователь №: 37963
На форуме: 3 года, 3 месяца, 24 дня
Карма: 27




Я уже на обе колонки поставил, когда таблица вырастет, сделаю эксперимент )) А пока так пусть будет.


--------------------

Заходил 29.09.2016
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14966
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 27 дней
Карма: 443




Цитата (T1grOK @ 9.03.2016 - 14:45)
бесполезное действие с подзапросом

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

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

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


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

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

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

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 17 дней
Карма: 170




Цитата (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
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Медведь  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 2482
Пользователь №: 37963
На форуме: 3 года, 3 месяца, 24 дня
Карма: 27




Цитата (sergeiss @ 9.03.2016 - 14:53)
Или же мы делаем индекс по 2-м полям сразу - но Медведь не хочет.

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

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

Ага.


--------------------

Заходил 29.09.2016
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14966
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 27 дней
Карма: 443




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

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


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

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

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

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 17 дней
Карма: 170




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

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


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 17 дней
Карма: 170




P.S. Кстати в случае с подзапросами, если это Mysql, нужно быть очень осторожным, так как подобные вещи оптимизатор часто обрабатывает неадекватно, поэтому подзапросы являются очень слабой стороной данной СУБД.


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев, 1 день
Карма: 87




Какое-то безумие творится-не понимаю что вы обсуждаете. Аж мозги кипят так пытаюсь понять что я не понимаю что вы такое понимаете! user posted image

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


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 17 дней
Карма: 170




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


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) 1 2 [3]  Ответ в темуСоздание новой темыСоздание опроса