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

> ORDER BY по большому количеству строк
chee  
 ۩  [x] Дата
Цитировать сообщение

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



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

Профиль
Группа: Сын полка
Сообщений: 1976
Пользователь №: 38654
На форуме: 3 года, 6 месяцев, 24 дня
Карма: 46




Есть такой запрос

SELECT contacts.id , LTRIM(RTRIM(CONCAT(IFNULL(contacts.last_name,''),' ',IFNULL(contacts.first_name,''),' ',IFNULL(contacts.middle_name,'')))) as name, contacts.first_name , contacts.last_name , contacts.middle_name , contacts.salutation , accounts.name account_name, jtl0.account_id account_id, contacts.account_id , contacts.phone_id , contacts.title , contacts.phone_work , contacts.phone_mobile , contacts.is_actual , jt1.user_name assigned_user_name , jt1.created_by assigned_user_name_owner , 'Users' assigned_user_name_mod, contacts.assigned_user_id
FROM contacts
LEFT JOIN accounts_contacts jtl0 ON contacts.id=jtl0.contact_id AND jtl0.deleted=0

LEFT JOIN accounts accounts ON accounts.id=jtl0.account_id AND accounts.deleted=0
AND accounts.deleted=0
LEFT JOIN users jt1 ON contacts.assigned_user_id=jt1.id AND jt1.deleted=0

AND jt1.deleted=0 where contacts.deleted=0
ORDER BY name
LIMIT 0,21


Выдает следующий EXPLAIN


*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: contacts
type: ref
possible_keys: idx_contacts_del_last,idx_cont_del_reports,idx_del_id_user
key: idx_contacts_del_last
key_len: 2
ref: const
rows: 183694
Extra: Using where; Using filesort
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: jtl0
type: ref
possible_keys: idx_contid_del_accid
key: idx_contid_del_accid
key_len: 113
ref: y2.contacts.id,const
rows: 1
Extra: Using index
*************************** 3. row ***************************
id: 1
select_type: SIMPLE
table: accounts
type: eq_ref
possible_keys: PRIMARY,idx_accnt_id_del,idx_accnt_assigned_del
key: PRIMARY
key_len: 108
ref: y2.jtl0.account_id
rows: 1
Extra:
*************************** 4. row ***************************
id: 1
select_type: SIMPLE
table: jt1
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 108
ref: y2.contacts.assigned_user_id
rows: 1
Extra:


Проседает при сортировке строк, что показывает профайлер и Using filesort в Extra.

Как можно избавиться от Using filesort при этом оставив сортировку, ну или как ускорить сортировку при использовании filesort. Возможно стоит какие-то буферы сортировок в настройках увеличить, но какие?


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

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

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



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

Профиль
Группа: Сын полка
Сообщений: 1976
Пользователь №: 38654
На форуме: 3 года, 6 месяцев, 24 дня
Карма: 46




ohmy.gif


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

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

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



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

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




Цитата (chee @ 1.06.2017 - 12:53)
LTRIM(RTRIM(CONCAT(IFNULL(contacts.last_name,''),' ',IFNULL(contacts.first_name,''),' ',IFNULL(contacts.middle_name,'')))) as name

Глядя на эту конструкцию, мне стало очень нехорошо smile.gif

Во-первых, почему бы не сделать по дефолту в каждом поле пустую строку, а NULL запретить?
Во-вторых, чтобы проиндексировать такое поле, его можно завести в той же таблице. И триггерами вставки и обновления его менять. Можешь написать там любую функцию, с любыми извратами. Тогда работа с этим полем будет вестись весьма шустро.
Да, проиграешь немного в объеме БД. Но зато выиграешь в скорости.


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

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

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

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

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



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

Профиль
Группа: Сын полка
Сообщений: 1976
Пользователь №: 38654
На форуме: 3 года, 6 месяцев, 24 дня
Карма: 46




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


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

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

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



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 823
Пользователь №: 36058
На форуме: 4 года, 7 месяцев
Карма: 42




order by contacts.last_name, contacts.first_name, contacts.middle_name
+ индекс по этим полям


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

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

Опции темы Ответ в темуСоздание новой темыСоздание опроса