ограничение в mysql с записью 10K, требующей слишком много времени для выполнения (сбой каждый раз)

#mysql

#mysql

Вопрос:

Я использую базу данных MySQL. У меня есть таблица, которая содержит до 75 тыс. строк данных. Я использую простой запрос для извлечения данных:

 select * from mytable
  

Он работает нормально, показывает 75k строк за несколько секунд. Я хотел получить некоторые из этих данных, которые я использовал limit 10000 . Он зависал каждый раз. Мне нужно оптимизировать запрос MySQL для записей 10k.
Я использую запрос, подобный этому:

 select * from mytable limit 10000
  

Дайте мне какое-нибудь решение, как быстро выполнить мой запрос.

моя структура базы данных такая:

 CREATE TABLE IF NOT EXISTS `mytable` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`col1` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`col2` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`col3` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`col4` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`col5` int(11) NOT NULL,
`col6` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`col7` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`col8` int(11) NOT NULL,
`col9` int(11) NOT NULL,
`col11` int(11) NOT NULL,
`col12` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`col13` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`col15` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`col16` enum('0','1') COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
`col17` int(11) NOT NULL,
`col18` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`col19` enum('0','1') COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`,`col2`,`col3`,`col4`,`col5`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=75530 ;
  

Комментарии:

1. 75K (ограничение или нет) само по себе — это то, о чем любая база данных не будет беспокоиться. Вы уверены, что ваша таблица не повреждена? Как долго он работает, пока не застрянет? Что такое оператор create вашей таблицы?

2. Этот запрос является тарабарщиной. В отсутствие предложения ‘order by’ предложение LIMIT приведет к повторяемым результатам.

3. SELECT * FROM mytable ORDER BY id LIMIT 10000 примерно так же быстро, как это возможно, если вам нужны все данные в первых записях 10k по id порядку. Вы не можете улучшить его с SQL помощью.

4. увы! не сработали mr. symcbean и mr.Quassnoi

Ответ №1:

С помощью этого решения я могу получать большие данные за несколько секунд:

 SELECT    l.id,l.col1,l.col2,l.col3,l.col3,l.col4,l.col5,l.col6,l.col7
FROM      (
           SELECT   id
           FROM     mytable
           WHERE    removed='0'
           ORDER BY id
           LIMIT 10000
          ) o
JOIN      mytable ON l.id = o.id
ORDER BY  l.id
  

Комментарии:

1. очень быстрое выполнение за 0,5 секунды спасибо за сообщение, которое мне очень помогло.