Surzhikov
@Surzhikov
Разработчик

Какую БД выбрать?

Добрый день, впервые сталкиваюсь с базой данных на 3,5 млн записей.
До этого все время работал с MySQL и SQLite.
Прошу помощи в оптимизации скорости, потому как при простых вопросах все серьезно притормаживает.

Сейчас базе всего одна таблица:
ID (varchar 32)
4 enum поля
и около 40 полей типа TEXT (сейчас с длинами полей я определился и преобразовал их в VARCHAR)

Примерно так:
ID 
var1 - enum
var2 - enum
var3 - enum
var4 - enum
vchar1 - varchar(200)
vchar2 - varchar(120)
vchar3 - varchar(200)
vchar4 - varchar(1200)
....
vchar40 - varchar(500)


Для визуализации данных я использую DataTables на Javascript-e, данные вытаскиваю из базы с помощью PDO.

Основные запросы такие:
1) Для отображения данных в таблице (жду около 15 секунд)
SELECT id, var2, var4, vchar4, vchar5, vchar34, vchar40 
FROM tbl 
WHERE
var1="a" 
LIMIT 390, 10 
ORDER BY var2 DESC

// В таблице отображаются не все поля из БД, а только четверть

2) Для поиска по таблице (работает совсем долго)
SELECT id, var2, var4, vchar4, vchar5, vchar34, vchar40 
FROM tbl 
WHERE
var2="searchtext" 
OR var4="searchtext" 
OR vchar4 LIKE "%searchtext%" 
OR ...... 
LIMIT 390, 10 
ORDER BY var2 DESC


3) Для вывода данных отдельной строки на отдельной странице:
SELECT * FROM tbl WHERE id="2A34SDF2fRfriow4ASF34ge135grere"


Вопросы такие:
1. Можно ли сделать быстро с MYSQL или нужно переходить на что-то другое (PostgreSQL?)
2. Если можно на MYSQL - какой движок использовать, на какие настройки конфига обратить внимание, как оптимизировать базу данных для более быстрого чтения

P.S. Скорость запись в бд - совершенно не важна.
  • Вопрос задан
  • 698 просмотров
Пригласить эксперта
Ответы на вопрос 5
@maxyc_webber
Web-программист
У нас Mysql база на 40 млн записей. Работает шустро. Правда таблица не одна ) Так что не в бд дело
Ответ написан
@shagguboy
запрос 2 быстро работать в таком виде не будет. переписать на полнотекст + union all и будет летать.
Ответ написан
Вообще-то у Varchar от 1 до 255 символов, как это у вас 1200 и 500? yapro.ru/web-master/mysql/tipi-poley-v-mysql.html
И полнотекстовый по крайней мере в mysql есть только по полнотекстовым полям там где есть индекс fulltext т.е. по varchar нет
Ответ написан
@drunking
Пока не поздно нормализуйте БД, разберитесь с типами данных (меня сильно смущает поле ID с типом varchar, я конечно же не знаю в каком формате хранятся там идентификаторы записей, но все же), после чего создайте индексы на полях, которые чаще всего используются в предикатах и все будет нормально.
Ответ написан
mahoho
@mahoho
Full stack certified PHP developer.
OR vchar4 LIKE "%searchtext%"

Вот из-за этого у вас работает долго - wildcard '%' в начале аргумента для LIKE предотвращает использование индекса. Попробуйте реализовать поиск этому полю другим образом, например полнотекстовым индексом. Кроме того, индексы не работают для поиске по enum полю из-за специфики из хранения (dev.mysql.com/doc/refman/5.6/en/enum.html). Попробуйте вместо enum сделать обычные текстовые поля с обычными индексами - это увеличит объем хранилища, но значительно ускорит SELECT'ы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы