Bug #69166 Wrong result of FOUND_ROWS() in MySQL 5.6
Submitted: 7 May 2013 17:31 Modified: 30 May 2013 5:11
Reporter: Ales Havlik Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Server: Optimizer Severity:S2 (Serious)
Version:5.6.11, 5.6.12, 5.7.2 OS:Linux (CentOS 6.4)
Assigned to: Tor Didriksen CPU Architecture:Any
Tags: regression

[7 May 2013 17:31] Ales Havlik
Description:
Executing FOUND_ROWS() after SELECT SQL_CALC_FOUND_ROWS ... returns wrong result under certain conditions.
Might be related to Bug #68458

See steps to reproduce. Changing limit to "0,50" or "1,50" returns correct result (150) but i.e. "10,50"/"50,50" returns a wrong one (60/100). On MySQL 5.5.29 all tested limits returned correct value. 

How to repeat:
CREATE TABLE `A` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `bid` bigint(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

CREATE TABLE `B` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

CREATE TABLE `C` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

insert  into `A`(`id`,`bid`) values (1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(10,1),(11,1),(12,1),(13,1),(14,1),(15,1),(16,1),(17,1),(18,1),(19,1),(20,1),(21,1),(22,1),(23,1),(24,1),(25,1),(26,1),(27,1),(28,1),(29,1),(30,1),(31,1),(32,1),(33,1),(34,1),(35,1),(36,1),(37,1),(38,1),(39,1),(40,1),(41,1),(42,1),(43,1),(44,1),(45,1),(46,1),(47,1),(48,1),(49,1),(50,1),(51,1),(52,1),(53,1),(54,1),(55,1),(56,1),(57,1),(58,1),(59,1),(60,1),(61,1),(62,1),(63,1),(64,1),(65,1),(66,1),(67,1),(68,1),(69,1),(70,1),(71,1),(72,1),(73,1),(74,1),(75,1),(76,1),(77,1),(78,1),(79,1),(80,1),(81,1),(82,1),(83,1),(84,1),(85,1),(86,1),(87,1),(88,1),(89,1),(90,1),(91,1),(92,1),(93,1),(94,1),(95,1),(96,1),(97,1),(98,1),(99,1),(100,1),(101,1),(102,1),(103,1),(104,1),(105,1),(106,1),(107,1),(108,1),(109,1),(110,1),(111,1),(112,1),(113,1),(114,1),(115,1),(116,1),(117,1),(118,1),(119,1),(120,1),(121,1),(122,1),(123,1),(124,1),(125,1),(126,1),(127,1),(128,1),(129,1),(130,1),(131,1),(132,1),(133,1),(134,1),(135,1),(136,1),(137,1),(138,1),(139,1),(140,1),(141,1),(142,1),(143,1),(144,1),(145,1),(146,1),(147,1),(148,1),(149,1),(150,1);

insert  into `B`(`id`) values (1);

insert  into `C`(`id`) values (1);

SELECT SQL_CALC_FOUND_ROWS A.id
FROM A 
WHERE A.bid IN 
    (SELECT B.id 
        FROM B JOIN C ON C.id = B.id) 
ORDER BY A.id 
LIMIT 50, 50; -- works fine for i.e. LIMIT 1, 50

SELECT FOUND_ROWS(); -- should return 150 but returns 100
[7 May 2013 17:50] Sveta Smirnova
Thank you for the report.

Verified as described.

Bug does not exist in version 5.5 and earlier.
[30 May 2013 5:11] Erlend Dahl
Duplicate of bug#69119.