Зависимость простого запроса от количества записаей в таблице

dron4ik

Новичок
Зависимость простого запроса от количества записаей в таблице

разделяя на страницы общий результат, делаю простой запрос:
PHP:
select * from data order by id DESC limit 0, 100
даже при 10 000 записях в таблице разница по времени, с таблицей в которой 100 записей, становится заметна. Я беспокоюсь, когда записей будет на порядок больше.

Хочется сделать такой запрос, который не будет зависеть от размера таблица, или это нереально?
 

dron4ik

Новичок
phprus
сорри, за такой вид, это из phpmyadmin:
id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE data index NULL PRIMARY 4 NULL 9246

где 9246 - количество строк в таблице.

Dovg
да, PRIMARY.

-~{}~ 11.06.08 11:54:

раз никто не отвечает, значит запрос:

select * from data order by id DESC limit 0, 100

ВСЕГДА будет зависеть от размера таблицы.

"не верю ©", что ничего нельзя поправить:(
 

Gas

может по одной?
ВСЕГДА будет зависеть от размера таблицы.
Теоритически, скорость будет зависеть от глубины b-tree дерева.
Но на практике, даже для миллионов записей, скорость такого запроса будет ну очень высокая, а при последующих запусках сравнима с выборкой из таблицы со 100 записями (при условии что нет полей с мегабайтным содержимым).
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Хочется сделать такой запрос, который не будет зависеть от размера таблица, или это нереально?
Ты о чем? Запрос зависит от раземра __индекса__
Если выборка по 10000 записей у тебя начинает тормозить то причины, врядли в количестве записей в бд.
 

dron4ik

Новичок
Gas
ну инфа в таблице часто обновляется, поэтому сильно кеширование запроса я не рассчитываю.

Mr_Max
Не то что она тормозит, дело в динамике времени. Сейчас работает достаточно быстро, но смотря в будущее я начинаю искать другие варианты деления на страницы, потому что время запроса растёт пропорционально количеству записей в БД.

запрос не подразумевает использование индекса, это простое деление на страницы.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
dron4ik
1. Преждевременная оптимизация - это зло.
инфа в таблице часто обновляется
Обновлять таблицу нужно не по каждому "пуку", а в определенные промежутки времени.
Каждых N минут используя временную таблицу.

Да ну?
о_0
explain чет по другому "говорит".
запрос не подразумевает использование индекса
1 SIMPLE data index NULL PRIMARY 4 NULL 9246
 

dron4ik

Новичок
Mr_Max
хм, этот индекс является простым ID, autoimcrement. Он как раз и показывает общее количество строк в таблице, тоесть все строки используются при запросе.

ну про временные ясно, спасибо. Но это в разы усложнит всю систему. видимо так и придётся делать, с кешированием промежуточных результатов.
 

Gas

может по одной?
dron4ik
смысл индексов в том состоит чтоб не перебирать все записи, то что explain показывает rows: 9246, это не значит что в твоём запросе будет просканирован индекс по ним всем. Стоит limit - запрос остановится когда возьмёт из индекса твои 100 строк и всё, этот процесс не зависит от количества записей в таблице.

-~{}~ 11.06.08 13:37:

Mr_Max
это не тот index, если используется только индексный файл, то в Extra стоит using index.
 

zerkms

TDD infected
Команда форума
Mr_Max
полистай расшифровку результатов Explain, index должен быть в Extra поле (Using index)
 

dron4ik

Новичок
Gas
в том-то и дело, что он перебирает все, потому что ему надо "order by id" сделать, а для этого надо посмотреть все эти строки. И так explain показывает ,что rows = количество строк в таблице. В не зависимости от количества строк.
 

Gas

может по одной?
dron4ik
ты можешь продолжать заблуждаться дальше, я не настаиваю.
 

dron4ik

Новичок
Gas
возможно я заблуждаюсь, даже скорее всего это так и есть:)
Но хотелось бы увидеть пример, чтобы в explain, столбце "rows" показывалось меньшее количество строк чем имеется в базе, если не сложно:)
 

Gas

может по одной?
limit в mysql не влияет на количество rows, показываемом в explain. Подробные описания в официальной документации сходу не нашёл, но можешь почитать это, обрати внимание на последний explain и описание, это пишет человек куда как авторитетней меня :)
 
Сверху