SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.05.2013 22:32:30

Neznayka
Участник
Зарегистрирован: 26.05.2013
Сообщений: 3

Быстрая выборка из таблицы с 500 000 записей

Добрый день. В БД мееются следующие таблицы :


CREATE TABLE IF NOT EXISTS p_s
(
          id INT(10) NOT NULL AUTO_INCREMENT,
          name VARCHAR(100) NOT NULL
          INDEX p_s_id (id),
) ENGINE=INNODB CHARACTER SET utf8;

CREATE TABLE IF NOT EXISTS t_i
(
          id INT(10) NOT NULL AUTO_INCREMENT,
          name VARCHAR(100) NOT NULL
          INDEX t_i_id (id),
) ENGINE=INNODB CHARACTER SET utf8;

CREATE TABLE IF NOT EXISTS synonyms_p_s
(
    p_s_id INT(10) NOT NULL,
    t_i_id INT(10) NOT NULL,
    synonym_ VARCHAR(100) NOT NULL,
    INDEX synonym_synonyms_p_s (synonym_),
    CONSTRAINT pkId_p_s_synonyms_p_s FOREIGN KEY (p_s_id) REFERENCES p_s (id) ON DELETE CASCADE,
    CONSTRAINT pkId_t_i_synonyms_p_s FOREIGN KEY (t_i_id) REFERENCES t_i (id) ON DELETE CASCADE
) ENGINE=INNODB CHARACTER SET utf8;
 

В таблице "synonyms_p_s" около 500 000 записей.
Задача : сделать максимально быструю выборку из таблицы "synonyms_p_s", чтобы делать подбор в поле, подобно как здесь : http://maps.2gis.ru/ в полях подбора.

1) Пробовал сделать выборку хранимой процедурой, с запросом :

CREATE PROCEDURE `sp_P_s_on_synonym`(IN `var_synonym_` VARCHAR(10)) /* сюда приходит строка поиска вроде '%про%' */
BEGIN
       SELECT DISTINCT
            s.p_s_id AS p_s_id,
            s.synonym_ AS p_s_synonym
       FROM
            synonyms_p_s AS s
       WHERE
            s.synonym_ LIKE var_synonym_
       LIMIT 10;
END
 

медленно получается, около двух секунд ожидания (не подходит для построения списка выбора подобранных значений)
2) Подумал о таблице MEMORY - отказался от этой мысли, всвязи с большим размером таблицы и ее даже не получается создать (The table 'tab4' is full)
3) Проблему могло было решить партицирование таблицы "synonyms_p_s", но по полю с типом VARCHAR этого вроде не сделать.


Незнаю куда двигаться, подскажите пожалуйста как можно это сделать. Заранее благодарен за ответ

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson