|
|
|
| Хочу спросить, сколько максимально рядов можно хранить в одной таблице, чтобы при правильно построеных запросах не наблюдалось "висов" и т.п.
Сейчас делаю скрипт, и передо мной встал именно этот вопрос - сделать несколько однотипных таблиц и существенно увеличить объем кода, или же хранить все в одной таблице и получить "тормоза"?
На локале проверял, полтора миллионна рядов в таблице из 15 полей, SELECT выполняется примерно 0,006 секунд - результат неплохой; но мучает вопрос что же будет на сервере? | |
|
|
|
|
|
|
|
для: SM!Le
(14.05.2007 в 17:07)
| | Покажите сам SELECT-запрос. Дело в том, что Вы могли запросить, например, самую первую запись в таблице и поэтому MySQL прочитала только первые несколько байт в файле таблицы от чего и такая скорость.
Добавьте условие и сортировку в запрос. И тогда он может выполняться несколько минут.
По моему опыту висы начинаются где-то со 100000-150000 записей. Это на среднем по мощности сервере. | |
|
|
|
|
|
|
|
для: SM!Le
(14.05.2007 в 17:07)
| | при правильно построенных запросах к правильно спроектированной БД - полтора миллиона записей - не повод для беспокойства. | |
|
|
|
|
|
|
|
для: Trianon
(14.05.2007 в 18:43)
| | Trianon, вы сами себе верите? :) | |
|
|
|
|
|
|
|
для: Unkind
(14.05.2007 в 18:48)
| | Конечно :)
http://www.mysql.ru/docs/man/Internal_use.html
http://www.mysql.ru/docs/man/MySQL_Benchmarks.html
Заметьте, это достаточно старая версия, и довольно пожилой документ.
Между прочим, предикат "при правильно построенных запросах" я взял из начального поста. | |
|
|
|
|
|
|
|
для: Trianon
(14.05.2007 в 19:05)
| | По первой ссылке не приведены конкретные цифры, так что трудно сказать, что они имели ввиду под "мгновенным доступом". И почему они взяли слово "мгновенно" в кавычки :))
По второй ссылке приведены лишь сравнения разных СУБД. В реальной ситуации два миллиона строк считывать, думаю, будет не надо.
P.S. Буду у компьютера, посмотрю остальные тесты на офф. сайте. Может там и есть что-то интересное. | |
|
|
|
|
|
|
|
для: Unkind
(14.05.2007 в 19:26)
| | При проверке прогонял запросы вида
"SELECT * FROM test WHERE rand>" . rand(30, 40) . " ORDER BY id DESC LIMIT " . rand(40, 70);
|
Самое долгое - 0,06 секунды, и это на моем подгнившем компе))
Спасибо за разъяснение, забью все в одну таблицу, а там уж видно будет.. | |
|
|
|
|
|
|
|
для: SM!Le
(14.05.2007 в 19:31)
| | Хм. Быть такого не может. Тут что-то не так...Вы результат считывали? Возможно, там ошибка и никакого запроса не выполняется. | |
|
|
|
|
|
|
|
для: Unkind
(14.05.2007 в 19:44)
| | Хм.. Не понимаю Ваших сомнений - неужели это столь удивительно?
Запросы делал из скрипта и непосредственно из PhpMyAdmin'a, и всегда результат одинаков. | |
|
|
|
|
|
|
|
для: SM!Le
(14.05.2007 в 19:53)
| | Да. Это очень удивительно. Вы уверены, что записей полтора миллиона? Добавляли скриптом? Сколько времени на добавление ушло? Какой, если не секрет тип таблицы? Не MEMORY (HEAP)? | |
|
|
|
|
|
|
|
для: 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. признак неправильной организации БД , запроса к ней и/или логики приложения. | |
|
|
|
|
|
|
|
для: Trianon
(14.05.2007 в 20:14)
| | Я понимаю. Имею ввиду в повседневных ситуациях таких ресурсоемких запросов как правило не делают.
Для меня этот тест говорит только о том, что MySQL справилась лучше всех. И не более. | |
|
|
|
|
|
|
|
для: Unkind
(14.05.2007 в 20:40)
| | >Я понимаю. Имею ввиду в повседневных ситуациях таких ресурсоемких запросов как правило не делают.
Тем более! Поскольку ресурсоемкие запросы нам не грозят, почему мы должны испугаться цифры в полтора миллиона? Это же размер таблицы, а не число поднятых записей. | |
|
|
|
|
|
|
|
для: Trianon
(14.05.2007 в 20:52)
| | Не соглашусь. Цифры там тоже приличные (время выборки). К тому же ни слова об условиях запроса и сортировке. Может, это тупой вывод всей таблицы. | |
|
|
|
|
|
|
|
для: Unkind
(14.05.2007 в 21:20)
| | вот теперь я полностью потерял нить спора. :) | |
|
|
|
|
|
|
|
для: Trianon
(14.05.2007 в 21:25)
| | )))) | |
|
|
|
|
|
|
|
для: Valick
(14.05.2007 в 21:29)
| | У меня на таблицу в 110 000 записей уходит около 6 секунд на выборку записей (не более 50) содержащих некоторый текст. ОС - FreeBSD 6.1. Самое интересное что тоже самое на Windows происходит за 2 секунды. В обоих вариантах Mysql 4-ой версии. | |
|
|
|
|
|
|
|
для: fduch
(14.05.2007 в 22:52)
| | Совсем меня смутили.. Скрипт почти дописан уже, а суть мне так ине ясна :(
Заполнял таблицу скриптом, порциями по 100 000, время не засекал, но не более 3-5 секунд смею предположить | |
|
|
|
|
|
|
|
для: SM!Le
(14.05.2007 в 23:01)
| | БД в 110 тыс строк весит около 100 метров... Думаю что это тоже както влияет на опеации над ней. | |
|
|
|
|
|
|
|
для: 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 и тогда скорость будет зверь. Ну и много еще факторов, они все описаны в руководстве (в основном в разделе куда я ссылку дал, но и в остальном тексте тоже хватает примочек). | |
|
|
|
|
|
|
|
для: XPraptor
(15.05.2007 в 03:08)
| | Точно. Сейчас сделал тест - запрос без индекса на сервере на БД в полмиллиона записей выполнялся приблизительно полсекунды, а после добавления индекса 0.0012. Классно :) | |
|
|
|