powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как ускорить процесс выборки
11 сообщений из 11, страница 1 из 1
Как ускорить процесс выборки
    #32334506
Programmer!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по большой таблице (100k - 2000k),
запрос типа select * from table where field like '%xxx%'
сейчас запрос выполняется за время 1сек,
если запрос немного усложнить select * from table where lcase(field) like '%xxx%'
то доходит вообще до 2.5 секунд
------------------------------------------------
так же актуально решить вопрос той же самой таблицы, НО разбитой на 300-600 маленьких, аналогичных по структуре, т.е. надо искать по всем сразу
...
Рейтинг: 0 / 0
Как ускорить процесс выборки
    #32334642
Stellar.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Никогда не пиши SELECT *. Перечисляй все имена полей
2) Построй индекс по полю, по которому ищешь
...
Рейтинг: 0 / 0
Как ускорить процесс выборки
    #32334654
Stellar.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
3) Используй полнотекстовый индекс
4) Если структура данных позволяет, откажись от поиска LIKE и делай вместо этого поиск по полю int.
Пример:
Имеем таблицу c записями о том, какие платежи поступали от покупателей
CREATE TABLE payments
(
id int not null auto_increment,
name varchar(255),
amount int,
primary key(id)
);
INSERT INTO payments(name, amount) VALUES ('Ivan', '1200');
INSERT INTO payments(name, amount) VALUES ('Peter', '800');
INSERT INTO payments(name, amount) VALUES ('Boris', '1600');
INSERT INTO payments(name, amount) VALUES ('Ivan', '5600');
Вместо поиска типа
SELECT * FROM payments WHERE name = 'Ivan';
Сделать:
CREATE TABLE users
(
id int not null auto_increment,
name varchar(255),
primary key(id)
);
INSERT INTO users(name) VALUES ('Ivan');
INSERT INTO users(name) VALUES ('Peter');
INSERT INTO users(name) VALUES ('Boris');

CREATE TABLE payments
(
id int not null auto_increment,
user_id int not null,
amount int,
primary key(id)
);
INSERT INTO payments(user_id, amount) VALUES (1, '1200');
INSERT INTO payments(user_id, amount) VALUES (2, '800');
INSERT INTO payments(user_id, amount) VALUES (3, '1600');
INSERT INTO payments(user_id, amount) VALUES (1, '5600');

И выбирать
SELECT * FROM payments WHERE user_id = '1';
...
Рейтинг: 0 / 0
Как ускорить процесс выборки
    #32334677
Programmer!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можешь подробнее про 2, 3 пункты?
...
Рейтинг: 0 / 0
Как ускорить процесс выборки
    #32334696
Alex Romanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
like не исспользует индексы
...
Рейтинг: 0 / 0
Как ускорить процесс выборки
    #32334717
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
like использует индексы. Но только в том случае, если первые символы шаблона не % и не ?. В данном случае, конечно index не будет использоваться.

Первым делом, конечно стоит попробовать fulltext index.
...
Рейтинг: 0 / 0
Как ускорить процесс выборки
    #32334726
Programmer!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Как ускорить процесс выборки
    #32334764
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.mysql.com/doc/ru/Fulltext_Search.html
...
Рейтинг: 0 / 0
Как ускорить процесс выборки
    #32334781
Alex Romanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а кстати
MATCH(zzz, "some words")
и
zzz like "%some words%"

это одно и тоже?
...
Рейтинг: 0 / 0
Как ускорить процесс выборки
    #32334987
Stellar.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, это абсолютно разные вещи.
...
Рейтинг: 0 / 0
Как ускорить процесс выборки
    #32335989
Programmer!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
насколько быстрее происходит поиск по fulltext?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как ускорить процесс выборки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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