Оптимизация запросов

12
Слава Шевцов
На сайте с 23.07.2005
Offline
370
#11

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

По RAND(). Проблема не в RAND(), а в самом факте сортировки с mediumtext полями.

Неизменность точки зрения неизменно порождает иллюзию понимания.
Dreammaker
На сайте с 20.04.2006
Offline
569
#12
Слава Шевцов:
Так что вряд ли тут что-то можно править. Но Вы правы - проблемы из-за этих сортировок.

Можно исправить способ случайного "доставания" записей. Если не критично количество запросов, то можно доставать по COUNT(*) (что при присутствиии индексов по id будет малозатратно), затем генерировать $rand = rand(0, $row['count']) и делать N-ое количество запросов "SELECT .... LIMIT $rand, 1".

Для 25+25 записей это конечно может быть "что занадто, то не здраво", но можно подумать и о оптимизации алгоритма.

Dreammaker
На сайте с 20.04.2006
Offline
569
#13
Слава Шевцов:
Проблема не в RAND()

Подождём что скажет ТС. Если проверка, которую я указал выше разгрузит базу, то причина в RAND() .

Я не отрицаю, что проблема в текстовых полях, но RAND() здесь играет не последнюю роль. Если я ошибаюсь, готов признать свою вину. Всегда готов учится. :) То, что в идеале нужна нормализация базы - согласен - эта мысль мне тоже вначале приходила. Но возможно можно исправить проблему меньшими силами.

update: сейчас подумал, что проверка не определит проблема больше в rand или вообще в сортировке по текстовым полям.

[Удален]
#14

да конечно про RAND() знаю, пробовал делать сортировку по id но не сильно помогает. Видимо всё Слава Шевцов был прав, тока как организовать это понятия не имею, понял про таблицы, но как сделать выборку в таком случае не понял :(

Dreammaker
На сайте с 20.04.2006
Offline
569
#15

Если прав Слава Шевцов и вы не совсем понимаете что к чему, то лучше всё же кого-то нанять.

[Удален]
#16

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

KosoyRoman добавил 26.02.2008 в 16:35

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

[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = cp1251

[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking

key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K

server-id = 1

default-character-set = cp1251
skip-character-set-client-handshake
init-connect="SET NAMES cp1251"

skip-bdb

skip-innodb

#innodb_data_home_dir = /var/db/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/db/mysql/
#innodb_log_arch_dir = /var/db/mysql/
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M
default-character-set = cp1251

[mysql]
no-auto-rehash
#safe-updates

default-character-set = cp1251
[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout
Слава Шевцов
На сайте с 23.07.2005
Offline
370
#17

KosoyRoman, а бестолку - таблица всё равно будет записана на диск. Даже если она десять раз уместится в памяти. Особенность такая у MySQL.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий