powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Приведение в нормальный вид таблицы Логинов
13 сообщений из 13, страница 1 из 1
Приведение в нормальный вид таблицы Логинов
    #33477451
MegaTron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как можно оптимизировать таблицу логинов пользователей,
она же используется для поиска пользователей по критериям:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE users (
   id int( 11 ) UNSIGNED auto_increment NOT NULL,
   login varchar( 32 ) NOT NULL,
   pass varchar( 32 ) NOT NULL,
   mail varchar( 128 ) NOT NULL,
   gender char( 1 ) NOT NULL,
   active char( 1 ) NOT NULL,
   logTime datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
   regTime datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
   photoHave int( 1 ) unsigned DEFAULT '0' NOT NULL,
   messNew int( 3 ) unsigned DEFAULT '0' NOT NULL,
   birthDate date DEFAULT '0000-00-00' NOT NULL,
   nick varchar( 128 ) NOT NULL,
   city varchar( 255 ) NOT NULL,
   aboutYou varchar( 255 ) NOT NULL,
   PRIMARY KEY (id),
   UNIQUE KEY (login),
   KEY mainSearch (gender, active, photoHave)
);

Есть стандартные запросы по таблице:

1. Проверка валидности логина и пароля
Код: plaintext
SELECT * FROM users WHERE login='1' AND pass='2'

2. Обновление количества сообщений
(происходит если кто-то пишет ему сообщение или он прочитывает одно из новых сообщений)
Код: plaintext
UPDATE LOW_PRIORITY users SET messNew = '2' WHERE login = 'funtik' 

3. Обновление времени последнего логина,
(происходит только если предыдущее время < на 5 минут)
Код: plaintext
UPDATE LOW_PRIORITY users SET logTime = '2006-01-11 21:36:33' WHERE login = 'rabit' AND pass = '***' 

4. Запрос пользователей по одному из параметров, таких как
gender, active, photoHave, birthDate

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

INNO DB не предлагать нет ее в mySql 3.23 :(
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33477468
Фотография Dinky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разбить таблицу - в одной id, login char(32), passwd char(32), logtime timestamp
и какие там еще нужны поля из тех, что фиксированой длины,
а в другой - id и все остальное
Идея в том, что update надо делать на маленькие записи фиксированой длины -
сократите все что можно, datetime - 8 байт, лучше timestamp, если других обновлений нет.
Уникальный индекс так же тормозит - подумайте, нужен ли он Вам. Для быстрого поиска лучше иметь простой индекс по (login, passwd)

--
Dmitry
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33477471
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть индекс по полям login, pass ?
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33477496
MegaTron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dinkyразбить таблицу - в одной id, login char(32), passwd char(32), logtime timestamp
и какие там еще нужны поля из тех, что фиксированой длины,
а в другой - id и все остальное

такой вопрос как я понимаю скорость update увеличивается при
а) фиксированной длине записи
б) минимизации длины записи

я правильно понимаю ?
может тогда лучше для logTime сделать отдельную таблицу вроде
id int(10)
logTime datetime


вторую таблицу
id int(10)
login char(32)
pass char(32)


третью таблицу все остальное ? я прав или это наоборот скажется отрицательно на производительности ?

Dinky
Уникальный индекс так же тормозит - подумайте, нужен ли он Вам. Для быстрого поиска лучше иметь простой индекс по (login, passwd)


ммм.. спасите а чем же уникальный индекс медленнее чем просто индекс,
и насколько это правильно следить в программном коде за уникальностью записей если есть стандартный инструмент бд ?
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33477517
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо, разделение таблицы на две (с фиксированной длиной записи и с переменной) не сильно поможет.
Оно помогло бы, если бы были массивные изменения. А в данном случае независимо от длины записи надо прочитать с диска один-два блока и записать на диск те же самые один-два блока (это не считая чтения индекса).

2 MegaTron
Сколько записей в таблице?
Что подразумевается под торможением сейчас? каково время выполнения запроса из пункта 3?

Кстати, для более быстрого выполнения пункта 4 надо создавать раздельные индексы по полям gender, active, photoHave, birthDate, а не KEY mainSearch (gender, active, photoHave)
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33477697
Фотография Dinky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegaTron
такой вопрос как я понимаю скорость update увеличивается при
а) фиксированной длине записи
б) минимизации длины записи

да, при условии, что вы ссылаетесь на запись по primary key

MegaTron
может тогда лучше для logTime сделать отдельную таблицу вроде
id int(10)
logTime datetime


вторую таблицу
id int(10)
login char(32)
pass char(32)


третью таблицу все остальное ? я прав или это наоборот скажется отрицательно на производительности ?

если только logTime надо часто обновлять, то достаточно его вынести в отдельную таблицу "статистики юзера", а остальное пусть живет в своей... и чего Вы не хотите сделать его в 2 раза меньше - timestamp? :)

MegaTron
ммм.. спасите а чем же уникальный индекс медленнее чем просто индекс,
и насколько это правильно следить в программном коде за уникальностью записей если есть стандартный инструмент бд ?
потому что серверу надо тратить ресурсы на проверку уникальности всякий раз при изменении/добавлении

--
Dmitry
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33477712
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а explain можно посмотреть?
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33478923
MegaTron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft
2 MegaTron
Сколько записей в таблице?
Что подразумевается под торможением сейчас? каково время выполнения запроса из пункта 3?]

В том то и дело, что таблица то небольшая
SELECT * FROM users
3394 всего, Query took 0.0737 sec


Торможение заключается в том что запросы вроде простой выборки всех записей
Код: plaintext
SELECT * FROM users

иногда занимают до 10-15 секунд :(

Как я понимаю это происходит из-за того что в процессах всегда висит
10-50 запросов вида
Код: plaintext
 48232    db   webnew1 db2   Query    129    Locked   UPDATE LOW_PRIORITY users SET logTime = '2006-01-12 16:10:07' WHERE login = 'olga21' AND pass = '***'  
я не могу себе представить что именно делает этот запрос в течении 129 секунд :(

miksoft
Кстати, для более быстрого выполнения пункта 4 надо создавать раздельные индексы по полям gender, active, photoHave, birthDate, а не KEY mainSearch (gender, active, photoHave)

Здесь чаще всего используются все поля,
т.е.

SELECT * FROM users WHERE gender='M' AND active != 'D' AND photoHave != 0

как я понял эксперементальным путем если создавать раздельные индексы по 1 полю то будет использоватся только 1 выдающий минимальное кол-во записей.

вот Explain
Код: plaintext
1.
SELECT * FROM users
WHERE login = 'olga21' AND pass = '***' 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
table  users 
type   const 
possible_keys  PRIMARY 
key PRIMARY  
key_len   32  
ref  olga21 
rows   1 
Extra  
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33479855
Фотография Dinky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, что-то у Вас там не то :) Проследите в списке задач когда там висят updat-ы в локе - кто их лочит? В колонке command - если locked, значит не выполняются, ждут пока закончится какой-то другой, который в это время выполняется

--
Dmitry
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33480105
Еретик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegaTron... INNO DB не предлагать нет ее в mySql 3.23 :(
Не уверен... Я слышал, с выходом 4.0 или 4.1 шел пач для 3.23 для InnoDB, поищите...
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33484963
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InnoDB с версии 3.23.34, если не ошибаюсь... только его явно нужно в конфиге включать...
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33484978
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegaTron
Как я понимаю это происходит из-за того что в процессах всегда висит
10-50 запросов вида
Код: plaintext
 48232    db   webnew1 db2   Query    129    Locked   UPDATE LOW_PRIORITY users SET logTime = '2006-01-12 16:10:07' WHERE login = 'olga21' AND pass = '***'  
я не могу себе представить что именно делает этот запрос в течении 129 секунд :(

Ну так low же priority!
http://dev.mysql.com/doc/refman/5.0/en/update.html
If you use the LOW_PRIORITY keyword, execution of the UPDATE is delayed until no other clients are reading from the table.
129 секунд запрос ждёт, когда из таблицы перестанут читать.
...
Рейтинг: 0 / 0
Приведение в нормальный вид таблицы Логинов
    #33485347
MegaTron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAl MegaTron

[quot http://dev.mysql.com/doc/refman/5.0/en/update.html%5D]http://dev.mysql.com/doc/refman/5.0/en/update.html]
If you use the LOW_PRIORITY keyword, execution of the UPDATE is delayed until no other clients are reading from the table.
129 секунд запрос ждёт, когда из таблицы перестанут читать.

ммм. это понятно, я сам прописывал туда lowPriority
как я понимаю происходит так,
накапливается nnn-update которые ждут прекращения чтения,
в один момент записываются в базу, тем самым ускоряя запись

из преймуществ:
быстрее записывается n-записей чем по одной
не блокирует операции чтения при множестве update

недостатки:
update подвисая и накапливаясь занимают по одному connection каждый или я не прав ?

Вообщем скажите Low_Priority это хорошо для некритичных данных
или это всегда плохо ?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Приведение в нормальный вид таблицы Логинов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]