MYSQL большое смещение LIMIT - PullRequest
       1

MYSQL большое смещение LIMIT

2 голосов
/ 10 декабря 2010

Я искал решение для этого, но, увы, ничего.

В настоящее время моя таблица загружает 5 800 000 строк из 5000 различных источников. Например:

CREATE TABLE stores(
  store_id INT UNSIGNED PRIMARY_KEY AUTO_INCREMENT,
  name VARCHAR(255)
);

CREATE TABLE articles(
  article_id INT UNSIGNED PRIMARY_KEY AUTO_INCREMENT
  article_name CHAR(80),
  article_price INT UNSIGNED,
  store_id INT UNSIGNED
);

Хорошо, я сделал индексы примерно так:

CREATE INDEX article ON articles(store_id,name);

И я подумал, что сделал его пуленепробиваемым, наверное, нет.

Когда я ищу большие наборы данных, 200 000 статей, я выдаю:

  SELECT article_name,
         article_price 
    FROM articles 
   WHERE store_id = $id 
ORDER BY article_name 
   LIMIT 100000,20;

И очень большое время ответа. Помогите, пожалуйста? : S

Ответы [ 2 ]

1 голос
/ 11 декабря 2010

Да, хорошо, я понял это, поскольку никто не поможет мне: D

Идея заключается в следующем, когда я заглядываю на какую-то страницу, я делаю следующее:

CREATE TEMPORARY TABLE result (row_id, article_id); SET @row: = 0; Вставить в результат SELECT @row: = (@ row + 1), article_id ИЗ статей ORDER BY $ sort $ order;

, а затем простой SELECT / JOIN:

ВЫБРАТЬ * ОТ результата СЛЕДУЮЩИЕ ПРИСОЕДИНЯЙТЕСЬ К СТАТЬЯМ result.article_id = Articles.article_id ГДЕ row_id> = $ from И row_id <$ to; </p>

Приветствия ...

0 голосов
/ 10 декабря 2010

Вы пробовали два отдельных индекса для store_id и article_name?Это может позволить более эффективную фильтрацию и упорядочение MySQL.Вы также можете рассмотреть возможность перемещения этого запроса в хранимую процедуру, чтобы MySQL мог кэшировать наборы выполнения / под-результаты.Если ничего из этого не работает, вы можете рассмотреть количество операций вставки / обновления / удаления, которые происходят в этой таблице.Если они высоки, вы можете рассмотреть репликацию на ведомую базу данных, где происходят все операции чтения.Если ничего из этого не работает, возможно, вы захотите обновить свое оборудование, поскольку MySQL должен легко обрабатывать таблицы такого размера.

...