Когда я запускаю следующие запросы с SQL_CALC_FOUND_ROWS
или задаю все цвета RED,BLUE,YELLOW
в подзапросе с использованием предложения IN
, я получаю количество записей 198
. Но когда я делаю каждый цвет индивидуально, я получаю COUNT
, который добавляет до 248 (72 + 59 + 118)
. Откуда берутся дополнительные 50 строк? Я бы подумал, что если бы я сделал их индивидуально, а затем добавил их, я получил бы 198
, но я получаю 248
. Я рассматриваю, как предложение IN работает неправильно? Я предпочел бы использовать COUNT
вместо SQL_CALC_FOUND_ROWS
, потому что я нашел SQL_CALC_FOUND_ROWS
гораздо медленнее (+3 секунды)В чем причина того, что подсчеты отличаются в запросах mysql?
Вот несколько статистика:
1. I am running MySQL Version: 5.5.2
2. The tables engine is INNODB.
3. All the `CHECK TABLE .... EXTENDED` return OK.
-- Returns 198
SELECT SQL_CALC_FOUND_ROWS DISTINCT p.* FROM Persons AS p
INNER JOIN Colors AS c ON c.PersonId = p.Id
WHERE p.Name = 'John Doe' AND c.ColorName IN ('YELLOW','RED','BLUE');
SELECT FOUND_ROWS();
-- Returns 198
SELECT COUNT(1) as MyCount FROM (SELECT DISTINCT p.* FROM Persons AS p
INNER JOIN Colors AS c ON c.PersonId = p.Id
WHERE p.Name = 'John Doe' AND c.ColorName IN ('YELLOW','RED','BLUE')) all;
-- Returns 72
SELECT COUNT(1) as MyCount FROM (SELECT DISTINCT p.* FROM Persons AS p
INNER JOIN Colors AS c ON c.PersonId = p.Id
WHERE p.Name = 'John Doe' AND c.ColorName IN ('RED')) red;
-- Returns 59
SELECT COUNT(1) as MyCount FROM (SELECT DISTINCT p.* FROM Persons AS p
INNER JOIN Colors AS c ON c.PersonId = p.Id
WHERE p.Name = 'John Doe' AND c.ColorName IN ('BLUE')) blue;
-- Returns 118
SELECT COUNT(1) as MyCount FROM (SELECT DISTINCT p.* FROM Persons AS p
INNER JOIN Colors AS c ON c.PersonId = p.Id
WHERE p.Name = 'John Doe' AND c.ColorName IN ('YELLOW')) yellow;
http://stackoverflow.com/questions/18025315/no-mysql-records-return-when-past-a-certain-limit –
@MitchWheat - Да, это было приостановлено, и это имеет больше смысла и более понятно. – Xaisoft