Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нагрузки на базу данных
 
 автор: SM!Le   (14.05.2007 в 17:07)   письмо автору
 
 

Хочу спросить, сколько максимально рядов можно хранить в одной таблице, чтобы при правильно построеных запросах не наблюдалось "висов" и т.п.
Сейчас делаю скрипт, и передо мной встал именно этот вопрос - сделать несколько однотипных таблиц и существенно увеличить объем кода, или же хранить все в одной таблице и получить "тормоза"?
На локале проверял, полтора миллионна рядов в таблице из 15 полей, SELECT выполняется примерно 0,006 секунд - результат неплохой; но мучает вопрос что же будет на сервере?

   
 
 автор: Unkind   (14.05.2007 в 18:34)   письмо автору
 
   для: SM!Le   (14.05.2007 в 17:07)
 

Покажите сам SELECT-запрос. Дело в том, что Вы могли запросить, например, самую первую запись в таблице и поэтому MySQL прочитала только первые несколько байт в файле таблицы от чего и такая скорость.
Добавьте условие и сортировку в запрос. И тогда он может выполняться несколько минут.
По моему опыту висы начинаются где-то со 100000-150000 записей. Это на среднем по мощности сервере.

   
 
 автор: Trianon   (14.05.2007 в 18:43)   письмо автору
 
   для: SM!Le   (14.05.2007 в 17:07)
 

при правильно построенных запросах к правильно спроектированной БД - полтора миллиона записей - не повод для беспокойства.

   
 
 автор: Unkind   (14.05.2007 в 18:48)   письмо автору
 
   для: Trianon   (14.05.2007 в 18:43)
 

Trianon, вы сами себе верите? :)

   
 
 автор: Trianon   (14.05.2007 в 19:05)   письмо автору
 
   для: Unkind   (14.05.2007 в 18:48)
 

Конечно :)
http://www.mysql.ru/docs/man/Internal_use.html
http://www.mysql.ru/docs/man/MySQL_Benchmarks.html
Заметьте, это достаточно старая версия, и довольно пожилой документ.

Между прочим, предикат "при правильно построенных запросах" я взял из начального поста.

   
 
 автор: Unkind   (14.05.2007 в 19:26)   письмо автору
 
   для: Trianon   (14.05.2007 в 19:05)
 

По первой ссылке не приведены конкретные цифры, так что трудно сказать, что они имели ввиду под "мгновенным доступом". И почему они взяли слово "мгновенно" в кавычки :))
По второй ссылке приведены лишь сравнения разных СУБД. В реальной ситуации два миллиона строк считывать, думаю, будет не надо.

P.S. Буду у компьютера, посмотрю остальные тесты на офф. сайте. Может там и есть что-то интересное.

   
 
 автор: SM!Le   (14.05.2007 в 19:31)   письмо автору
 
   для: Unkind   (14.05.2007 в 19:26)
 

При проверке прогонял запросы вида

"SELECT * FROM test WHERE rand>" . rand(30, 40) . " ORDER BY id DESC LIMIT " . rand(40, 70);

Самое долгое - 0,06 секунды, и это на моем подгнившем компе))
Спасибо за разъяснение, забью все в одну таблицу, а там уж видно будет..

   
 
 автор: Unkind   (14.05.2007 в 19:44)   письмо автору
 
   для: SM!Le   (14.05.2007 в 19:31)
 

Хм. Быть такого не может. Тут что-то не так...Вы результат считывали? Возможно, там ошибка и никакого запроса не выполняется.

   
 
 автор: SM!Le   (14.05.2007 в 19:53)   письмо автору
 
   для: Unkind   (14.05.2007 в 19:44)
 

Хм.. Не понимаю Ваших сомнений - неужели это столь удивительно?
Запросы делал из скрипта и непосредственно из PhpMyAdmin'a, и всегда результат одинаков.

   
 
 автор: Unkind   (14.05.2007 в 20:34)   письмо автору
 
   для: SM!Le   (14.05.2007 в 19:53)
 

Да. Это очень удивительно. Вы уверены, что записей полтора миллиона? Добавляли скриптом? Сколько времени на добавление ушло? Какой, если не секрет тип таблицы? Не MEMORY (HEAP)?

   
 
 автор: Trianon   (14.05.2007 в 20:14)   письмо автору
 
   для: Unkind   (14.05.2007 в 19:26)
 

И почему они взяли слово "мгновенно" в кавычки :))
Потому что истинно мгновенного (т.е. вообще без затрат времени) доступа быть не может.


Ситуация, в которой считывают все строки, это одно из:
1. бенчмарк-тест.
2. снятие дампа
3. разовая администрирующая операция , призванная исправить таблицу (например исправление кавычек в этом форуме)
4. аналитический запрос. (вроде SELECT id_user, AVG(LENGTH(text) as avlen FROM posts GROUP BY id_user ORDER BY avlen desc; )
5. признак неправильной организации БД , запроса к ней и/или логики приложения.

   
 
 автор: Unkind   (14.05.2007 в 20:40)   письмо автору
 
   для: Trianon   (14.05.2007 в 20:14)
 

Я понимаю. Имею ввиду в повседневных ситуациях таких ресурсоемких запросов как правило не делают.
Для меня этот тест говорит только о том, что MySQL справилась лучше всех. И не более.

   
 
 автор: Trianon   (14.05.2007 в 20:52)   письмо автору
 
   для: Unkind   (14.05.2007 в 20:40)
 

>Я понимаю. Имею ввиду в повседневных ситуациях таких ресурсоемких запросов как правило не делают.

Тем более! Поскольку ресурсоемкие запросы нам не грозят, почему мы должны испугаться цифры в полтора миллиона? Это же размер таблицы, а не число поднятых записей.

   
 
 автор: Unkind   (14.05.2007 в 21:20)   письмо автору
 
   для: Trianon   (14.05.2007 в 20:52)
 

Не соглашусь. Цифры там тоже приличные (время выборки). К тому же ни слова об условиях запроса и сортировке. Может, это тупой вывод всей таблицы.

   
 
 автор: Trianon   (14.05.2007 в 21:25)   письмо автору
 
   для: Unkind   (14.05.2007 в 21:20)
 

вот теперь я полностью потерял нить спора. :)

   
 
 автор: Valick   (14.05.2007 в 21:29)   письмо автору
 
   для: Trianon   (14.05.2007 в 21:25)
 

))))

   
 
 автор: fduch   (14.05.2007 в 22:52)   письмо автору
 
   для: Valick   (14.05.2007 в 21:29)
 

У меня на таблицу в 110 000 записей уходит около 6 секунд на выборку записей (не более 50) содержащих некоторый текст. ОС - FreeBSD 6.1. Самое интересное что тоже самое на Windows происходит за 2 секунды. В обоих вариантах Mysql 4-ой версии.

   
 
 автор: SM!Le   (14.05.2007 в 23:01)   письмо автору
 
   для: fduch   (14.05.2007 в 22:52)
 

Совсем меня смутили.. Скрипт почти дописан уже, а суть мне так ине ясна :(
Заполнял таблицу скриптом, порциями по 100 000, время не засекал, но не более 3-5 секунд смею предположить

   
 
 автор: fduch   (14.05.2007 в 23:09)   письмо автору
 
   для: SM!Le   (14.05.2007 в 23:01)
 

БД в 110 тыс строк весит около 100 метров... Думаю что это тоже както влияет на опеации над ней.

   
 
 автор: XPraptor   (15.05.2007 в 03:08)   письмо автору
 
   для: fduch   (14.05.2007 в 23:09)
 

http://www.pomorsu.ru/~olmer/docs/mysql/manual.ru_MySQL_Optimisation.html

Скорость выборки целиком зависит от того как спроектированы таблицы и их индексы. Я веду логи доступа к сайтам в MySQL каждую таблицу стараюсь не превышать в 8 миллионов записей скорость запроса на 5-10- тысяч записей, находящихся в последних рядах от 0.09 до 0.4 максимум.

Главное при запросе правильно заюзать индексы во WHERE и тогда скорость будет зверь. Ну и много еще факторов, они все описаны в руководстве (в основном в разделе куда я ссылку дал, но и в остальном тексте тоже хватает примочек).

   
 
 автор: Unkind   (15.05.2007 в 21:25)   письмо автору
 
   для: XPraptor   (15.05.2007 в 03:08)
 

Точно. Сейчас сделал тест - запрос без индекса на сервере на БД в полмиллиона записей выполнялся приблизительно полсекунды, а после добавления индекса 0.0012. Классно :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования