Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как ускорить процесс выборки / 11 сообщений из 11, страница 1 из 1
25.11.2003, 17:18
    #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
25.11.2003, 18:48
    #32334642
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить процесс выборки
1) Никогда не пиши SELECT *. Перечисляй все имена полей
2) Построй индекс по полю, по которому ищешь
...
Рейтинг: 0 / 0
25.11.2003, 18:58
    #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
25.11.2003, 19:41
    #32334677
Programmer!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить процесс выборки
Можешь подробнее про 2, 3 пункты?
...
Рейтинг: 0 / 0
25.11.2003, 20:01
    #32334696
Alex Romanovsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить процесс выборки
like не исспользует индексы
...
Рейтинг: 0 / 0
25.11.2003, 20:55
    #32334717
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить процесс выборки
like использует индексы. Но только в том случае, если первые символы шаблона не % и не ?. В данном случае, конечно index не будет использоваться.

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

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


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