1
У меня есть большая таблица в mysql, около 1 миллиона записей.Mysql Limit Performance
Я использую динамический запрос с различными параметрами, где положение и порядок, поэтому я не можем использовать некоторый код, как AND id > 34000 LIMIT 10
У меня есть индекс на моих полях в WHERE
и LIMIT
и ORDER
, но индекс не поможет в одиночестве.
Мне нужен лучший способ, чем LIMIT 34000, 10
, Есть ли способ задержки сдвига сплава?
Я поместил свою схему таблицы, но я просто скопировал более полезное поле без какого-либо индекса, потому что я использую динамические запросы.
CREATE TABLE IF NOT EXISTS `p_apartmentbuy` (
`property_id` mediumint(8) unsigned NOT NULL,
`dateadd` int(10) unsigned NOT NULL,
`sqm` smallint(5) unsigned NOT NULL,
`sqmland` smallint(5) unsigned NOT NULL,
`age` tinyint(2) unsigned NOT NULL,
`price` bigint(12) unsigned NOT NULL,
`pricemeter` int(11) unsigned NOT NULL,
`floortotal` tinyint(3) unsigned NOT NULL,
`floorno` tinyint(3) unsigned NOT NULL,
`unittotal` smallint(4) unsigned NOT NULL,
`unitthisfloor` tinyint(3) unsigned NOT NULL,
`room` tinyint(1) unsigned NOT NULL,
`parking` tinyint(1) unsigned NOT NULL,
`renovate` tinyint(1) unsigned NOT NULL,
`address` varchar(255) COLLATE utf8_general_ci NOT NULL,
`describe` varchar(500) COLLATE utf8_general_ci NOT NULL,
`featured` tinyint(1) unsigned NOT NULL,
`l_location_id` smallint(5) unsigned NOT NULL,
`l_city_id` smallint(4) unsigned NOT NULL,
`pf_furnished_id` tinyint(2) unsigned NOT NULL,
PRIMARY KEY (`property_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
LIMIT может быть быстрым, если запрос может использовать индекс для WHERE и ORDER BY. Не могли бы вы отправить запрос, схему ('SHOW CREATE TABLE
Я использую индекс в полях в 'WHERE LIMIT ORDER', но он не помогает в одиночку. И я не могу опубликовать свой запрос, потому что его динамическая схема и таблица таблиц являются большими: -s @ arnaud576875 – Hamidreza
Опубликовать только один вариант запроса и (просто нужно увидеть столбцы, используемые в предложениях WHERE и ORDER BY, плюс индексы) – arnaud576875
ответ
Проблема с таблицей с 1 мельничных записей обыкновение быть
AND id > 34000 LIMIT 10
илиLIMIT 34000, 10
, что будет до структуры и остальной части запроса. I.E, вам нужен индекс, PK, FK, чтобы ускорить запрос, кроме того, что заказ, вероятно, замедлит его, сделайте поискlike '%text%'
, он сделает ваш запрос SLOW. Также это зависит от стола. ДвигательТак что не ожидайте, что изменение предела 10 будет иметь огромное значение. Есть несколько инструментов, которые помогут вам определить «лучший» запрос, но не все запросы работают одинаково, поэтому не ожидайте «лучшего решения», потому что его не существует.
Вы можете использовать Показать
create table
илиDescribe select ......
илиexplain
, чтобы увидеть, что происходит, или использовать командуbenchmark
, чтобы увидеть примерное время функции, которую вы претендуете, чтобы улучшить егоEDIT:
Некоторые инструменты для MySQL Я порекомендую вам взглянуть на эту программу, которая поможет вам в этой части производительности.
источник
2012-07-05 17:01:15 jcho360
Im не использует низкопроизводительный запрос типа 'like '% text%' ', но я должен использовать' match to' в некоторых запросах. Моя самая большая проблема - это порядок по нескольким полям и задержка смещения, когда мне нужна запись в 200 000 записей – Hamidreza
@ hamidreza66 Я знаю, что вы не используете, как, но я имею в виду, что у вас не может быть «лучший способ», потому что есть разные способы сделать запрос , и время отклика будет отличаться. Наиболее важной является структура базы данных и полный запрос для получения «хорошей» производительности. Я называю вас некоторыми инструментами, которые помогут найти лучшее решение – jcho360
Сообщите мне об этом инструментах – Hamidreza
MySQL может оптимизировать LIMIT положения (то есть только сканировать/оценить строки в диапазоне, заданном ПРЕДЕЛ), если он способен использовать только индексы, чтобы найти строки, соответствующие запросу.
Для запросов, таких как
SELECT * FROM users WHERE active = 1 ORDER BY created_at
, добавление и индекс на (active, created_at) достаточно.См http://www.mysqlperformanceblog.com/2006/09/01/order-by-limit-performance-optimization/
источник
2012-07-05 16:58:04 arnaud576875
Я знаю это, но что мне делать, если запрос динамический, и его возможно наличие 1 поля в где статья или поле! – Hamidreza
Этот запрос предназначен для формы поиска и может возвращать все записи и не сортировать по id или любому уникальному идентификатору, я думаю, что его плохой способ использовать ограничение лимита – Hamidreza
Смежные вопросы