URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 2169
[ Назад ]

Исходное сообщение
"Можно ли физически отсортировать записи в табл. MySQL? из PHP скрипта?"

Отправлено Nikifor , 14-Мрт-04 15:35 
Здравствуйте!
Какие существуют способы физически отсортировать записи в таблице MySQL?
Можно ли это сделать с из PHP скрипта?

Содержание

Сообщения в этом обсуждении
"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено solotony , 15-Мрт-04 15:31 
сделай дамп в нужном порядке а затем вставь.



"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Beut , 16-Мрт-04 03:33 
>сделай дамп в нужном порядке а затем вставь.

А зачем их физически сортировать???


"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Andrew , 16-Мрт-04 14:45 
>>сделай дамп в нужном порядке а затем вставь.
>
>А зачем их физически сортировать???

Что значит физически отсортировать базы??????????
Совершенно безразлично как они там лежат, mysql тебе их отдаст так как тебе надо, вплоть до того, что сама соберет данные из разных таблиц в один запрос, из чего потом можно сделать 1 массив....
а на физическом уровне MySQL лучше не лазить....... эт тебе не текстовый файл


"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено solotony , 16-Мрт-04 15:12 
>>>сделай дамп в нужном порядке а затем вставь.
>>
>>А зачем их физически сортировать???

Для скорости. Подобная вещь может повысить скорость выполнения запросов. На больших базах это помогает.

>Что значит физически отсортировать базы??????????
>Совершенно безразлично как они там лежат, mysql тебе их отдаст так как
>тебе надо, вплоть до того, что сама соберет данные из разных
>таблиц в один запрос, из чего потом можно сделать 1 массив....

Да, но скорость, скорость... Покрути-ка гиговые таблички - никакой кеш не спасет.

>а на физическом уровне MySQL лучше не лазить....... эт тебе не текстовый
>файл

Ну не кто же не предлагает править вручную файлы БД.



"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено MeLLowD , 16-Мрт-04 18:18 
>>>>сделай дамп в нужном порядке а затем вставь.
>>>
>>>А зачем их физически сортировать???
>
>Для скорости. Подобная вещь может повысить скорость выполнения запросов. На больших базах
>это помогает.
>
>>Что значит физически отсортировать базы??????????
>>Совершенно безразлично как они там лежат, mysql тебе их отдаст так как
>>тебе надо, вплоть до того, что сама соберет данные из разных
>>таблиц в один запрос, из чего потом можно сделать 1 массив....
>
>Да, но скорость, скорость... Покрути-ка гиговые таблички - никакой кеш не спасет.
>
>
>>а на физическом уровне MySQL лучше не лазить....... эт тебе не текстовый
>>файл
>
>Ну не кто же не предлагает править вручную файлы БД.


а индексирование типа нельзя использовать? :)


"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Andrew , 16-Мрт-04 18:35 
Могу показать пример базы, весящей 790 мегов, из 8 000 000 наименований, запрос обрабатывает за 0,02 секунды, на Целероне 1100...... без напрягов, поиск по каталогу запчастей......... надо?

"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено solotony , 16-Мрт-04 19:57 
Кстати, а что за база запчастей? Не продается ли? Один мой клиент очень ищет себе.


"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено solotony , 16-Мрт-04 19:53 
>а индексирование типа нельзя использовать? :)

Естественно надо использовать. Но при упорядоченном хранении определенные запросы работают гораздо быстрее. Только из-за того, что не требуется по многу раз дергать файл.


"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Beut , 17-Мрт-04 05:11 
>>а индексирование типа нельзя использовать? :)
>
>Естественно надо использовать. Но при упорядоченном хранении определенные запросы работают гораздо быстрее.
>Только из-за того, что не требуется по многу раз дергать файл.

Эту задачу и решают индексы.

Тебе же, для ускорения работы, нужно скорее грамотно изменить сами таблицы. Например, если все таблицы будут состоять из столбцов CHAR(200) и не будет ни одного VARCHAR, то скорость работы резко возрастёт. Просто по логике - если у нас каждая запись фиксированной длины, мы может перемещаться по файлу смещением.

А вообще почитай документацию по оптимизации MySQL - есть достаточно много тонкостей и способов выжать самую большую скорость по сравнению со всеми существующими на данным момент базами. Как же именно база работает со своими файлами, тебя особо интересовать не должно. Если ты, конечно, не её администратор. Если админ - читай ту же документацию по MySQL.

Удачи :)



"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Andrew , 17-Мрт-04 10:03 
По поводу базы пусть на мыло пишет, можем помочь, тока обновлять ее он так запарится....... зачастую там прайс производителя надо обновлять целиком, а это как минимум файл мега в 3 ...........

"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено solotony , 17-Мрт-04 12:57 
>>>а индексирование типа нельзя использовать? :)
>>
>>Естественно надо использовать. Но при упорядоченном хранении определенные запросы работают гораздо быстрее.
>>Только из-за того, что не требуется по многу раз дергать файл.
>
>Эту задачу и решают индексы.

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

Вот пример такой - большая база, проиндексирована естественно. На ней активно идет изменение. Через месяц-другой она начинает тормозить. Причем торможение становится больше и больше. И в этой ситуации спасал дамп и восстановление. Если вы с такой ситуацией не сталкивались, то вам пока просто повезло :)

МуSQL вобще довольно плохо работает с изменяемыми б/д, по крайней мере производительность по вставкам у нее наихудшаяя (суда по тестам, которых в инете навалом). В частности в той задаче от MySQL отказались в пользу postgres.


"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено MeLLowD , 17-Мрт-04 14:11 
>>>>а индексирование типа нельзя использовать? :)
>>>
>>>Естественно надо использовать. Но при упорядоченном хранении определенные запросы работают гораздо быстрее.
>>>Только из-за того, что не требуется по многу раз дергать файл.
>>
>>Эту задачу и решают индексы.
>
>Индексы решают проблему выбора нужных записей, и оптимизируют поиск этих записей.  
>Это разные уровни. Одно дело определить где находится требуемая запись, а
>другое - вытащить ее.
>
>Вот пример такой - большая база, проиндексирована естественно. На ней активно идет

Именно для динамического вормата полей и существует optimize table, который помимо прочего дефрагментирует файл БД и сортирует индексные страницы.
>изменение. Через месяц-другой она начинает тормозить. Причем торможение становится больше и
>больше. И в этой ситуации спасал дамп и восстановление. Если вы
>с такой ситуацией не сталкивались, то вам пока просто повезло :)
>
>
>МуSQL вобще довольно плохо работает с изменяемыми б/д, по крайней мере производительность
>по вставкам у нее наихудшаяя (суда по тестам, которых в инете
>навалом). В частности в той задаче от MySQL отказались в пользу
>postgres.



"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Andrew , 17-Мрт-04 19:09 

>>Вот пример такой - большая база, проиндексирована естественно. На ней активно идет
>
>Именно для динамического вормата полей и существует optimize table, который помимо прочего
>дефрагментирует файл БД и сортирует индексные страницы.
>>изменение. Через месяц-другой она начинает тормозить. Причем торможение становится больше и
>>больше. И в этой ситуации спасал дамп и восстановление. Если вы
>>с такой ситуацией не сталкивались, то вам пока просто повезло :)
>>
Это на какой ОСи крутилось?????????? Что бзнать на всякий случай..... а то мало-ли,............

"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Beut , 18-Мрт-04 03:32 
>Индексы решают проблему выбора нужных записей, и оптимизируют поиск этих записей.  
>Это разные уровни. Одно дело определить где находится требуемая запись, а >другое - вытащить ее.

А в чём проблема с вытаскиванием? Это уже проблема файловой системы в таком случае.

>Вот пример такой - большая база, проиндексирована естественно. На ней активно идет
>изменение. Через месяц-другой она начинает тормозить. Причем торможение становится больше и
>больше. И в этой ситуации спасал дамп и восстановление. Если вы
>с такой ситуацией не сталкивались, то вам пока просто повезло :)

А переиндексировать таблицы не пробовали? :)
Сколько тысяч записей, если не секрет? У меня таблицы на 20-30 тысяч работают без особых проблем. Если речь идёт о миллионах записей - тогда да, тут уже не до скорости.

Вообще индексы - это не всегда панацея и очень тонкая вещь. Нужно просто понимать что они делают и как работают.

>МуSQL вобще довольно плохо работает с изменяемыми б/д, по крайней мере производительность
>по вставкам у нее наихудшаяя (суда по тестам, которых в инете
>навалом). В частности в той задаче от MySQL отказались в пользу
>postgres.

Тут нужно просто уметь использовать возможности. Индексация и время добавления - вещи обратнопропорциональные. Когда требуется перегонять большие данные - удали индексы. А после создай заново. Иначе для каждой записи будет проводиться сопоставление индекса и т.д. (если же ещё и куча этих индексов - вообще беда). Индексы же позволяют резко увеличить скорость именно при чтении, что зачастую бывает гораздо важнее. Очень часто меняющиеся данные - откажись от индексации. В чтении потеряешь, зато при добавлении выиграешь. Ещё есть такие вещи, как LOAD DATA - это эффективнее оператора INSERT, так как загружает данные в массе.

И не уверен, что MySQL проиграет по тестам, если будет работать с оптимально реализованными таблицами. Хотя спорить не буду, не проверял. Просто пока действительно не сталкивался с задачами, которые не мог решить бы MySQL.


"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Andrew , 18-Мрт-04 10:07 
>>Индексы решают проблему выбора нужных записей, и оптимизируют поиск этих записей.  
>>Это разные уровни. Одно дело определить где находится требуемая запись, а >другое - вытащить ее.
>
>А в чём проблема с вытаскиванием? Это уже проблема файловой системы в
>таком случае.
>
>>Вот пример такой - большая база, проиндексирована естественно. На ней активно идет
>>изменение. Через месяц-другой она начинает тормозить. Причем торможение становится больше и
>>больше. И в этой ситуации спасал дамп и восстановление. Если вы
>>с такой ситуацией не сталкивались, то вам пока просто повезло :)
>
у меня в базе 8 000 000 наименований, кстати я когда обновлял пробовал INSERT IGNORE - тоже шустро работает...... и как-бы косяков не замечено пока, база вертится месяц - полтора, правда обновляли всего 2 раза....
>А переиндексировать таблицы не пробовали? :)
>Сколько тысяч записей, если не секрет? У меня таблицы на 20-30 тысяч
>работают без особых проблем. Если речь идёт о миллионах записей -
>тогда да, тут уже не до скорости.
>
>Вообще индексы - это не всегда панацея и очень тонкая вещь. Нужно
>просто понимать что они делают и как работают.
>
>>МуSQL вобще довольно плохо работает с изменяемыми б/д, по крайней мере производительность
>>по вставкам у нее наихудшаяя (суда по тестам, которых в инете
>>навалом). В частности в той задаче от MySQL отказались в пользу
>>postgres.
>
>Тут нужно просто уметь использовать возможности. Индексация и время добавления - вещи
>обратнопропорциональные. Когда требуется перегонять большие данные - удали индексы. А после
>создай заново. Иначе для каждой записи будет проводиться сопоставление индекса и
>т.д. (если же ещё и куча этих индексов - вообще беда).
>Индексы же позволяют резко увеличить скорость именно при чтении, что зачастую
>бывает гораздо важнее. Очень часто меняющиеся данные - откажись от индексации.
>В чтении потеряешь, зато при добавлении выиграешь. Ещё есть такие вещи,
>как LOAD DATA - это эффективнее оператора INSERT, так как загружает
>данные в массе.
>
>И не уверен, что MySQL проиграет по тестам, если будет работать с
>оптимально реализованными таблицами. Хотя спорить не буду, не проверял. Просто пока
>действительно не сталкивался с задачами, которые не мог решить бы MySQL.
>



"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Beut , 27-Мрт-04 02:53 
Как произвести оптимизацию хранилища в MySQL

Почистить "дырки" (дефрагментация), обновить статистику и отсортировать индексы:
OPTIMIZE TABLE имя_таблицы;
или использовать: myisamchk --quick --check-only-changed --sort-index --analyze
Внимание, myisamchk нужно запускать при _не_ запущенном mysqld, иначе нужно использовать утилиту mysqlcheck
(mysqlcheck --repair --analyze --optimize --all-databases --auto-repair)

Апдейт статистики оптимизатора:
ANALYZE TABLE имя_таблицы;
или использовать: myisamchk --analyze

Рекомендуется регулярно выполнять:
isamchk -r --silent --sort-index -O sort_buffer_size=16M db_dir/*.ISM
myisamchk -r --silent --sort-index -O sort_buffer_size=16M db_dir/*.MYI


"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Сергей , 09-Апр-04 13:06 
При сортировке записей можно использовать ORDER BY? много недостатков он имеет если база данных небольшая (1000 строк)?
Ещё подскажите пожалуйста что такое "дамп"?

"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено MeLLowD , 09-Апр-04 14:04 
>При сортировке записей можно использовать ORDER BY? много недостатков он имеет если
>база данных небольшая (1000 строк)?
>Ещё подскажите пожалуйста что такое "дамп"?

Дамп грубо говоря преобразование БД в sql запросы, например для резервного копирования (смотри утилиту mysqldump все сразу станет понятно).
Поскольку альтернативы ORDER BY нету то вопрос довольно забавный :)


"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено solotony , 09-Апр-04 14:19 
Проиндексируй и используй ORDER BY. Для такой базы даже не стоит думать об оптимизации :)


"Можно ли физически отсортировать записи в табл. MySQL? из PH..."
Отправлено Сергей , 10-Апр-04 20:26 
Спасибо всем за помощь!