Что быстрее, подсчитать количество элементов в таблице или получить последнюю запись? - PullRequest
1 голос
/ 25 марта 2011

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

Мы говорим о MySql здесь.

Ответы [ 4 ]

7 голосов
/ 25 марта 2011

Если таблица ISAM, число строк кэшируется и должно быть возвращено немедленно.

Если таблица InnoDB, она может быть немного медленнее.

Для получения дополнительной информации см. Особенноэтот комментарий:

http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/comment-page-1/#comment-106645

4 голосов
/ 25 марта 2011

Я не знаю, что эти два действия действительно совершают одно и то же.Что вы пытаетесь сделать?

Вы пытаетесь определить, сколько записей в таблице?Если это так, то просто получить последнюю запись (и, я полагаю, используя ее идентификационный номер в качестве количества записей) было бы неточно.Если вы вставили 10 строк, а затем удалили строки 3 и 7, то максимальный идентификатор равен 10, но у вас есть только 8 записей.

По тем же причинам подсчет записей не даст вам наибольшегоИдентификационный номер, потому что во многих случаях будет меньше записей, чем число, указанное в самом высоком идентификаторе.

Кроме того, с точки зрения скорости, я почти уверен, что большинство методов подсчета строк и большинство методов определенияпоследняя строка будет использовать таблицу / индексы одинаково, поэтому я не думаю, что будет огромная разница в скорости.

0 голосов
/ 25 марта 2011

Почему бы просто не использовать

Select count(*) FROM ...

Вероятно, это самый быстрый способ, поскольку база данных может сделать это быстро, а объем возвращаемых данных очень мал.

0 голосов
/ 25 марта 2011

Дикая догадка здесь, но при условии, что ваша таблица проиндексирована правильно, получение любого элемента происходит очень быстро. Я думаю, что получение последнего элемента происходит быстрее, и даже ожидал бы, что MySQL будет фактически подсчитывать все записи, когда вы запрашиваете количество записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...