#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 секунды спасибо за сообщение, которое мне очень помогло.