CREATE TABLE `query_test` (
`ID` INT NOT NULL AUTO_INCREMENT,
`NAME` VARCHAR(64) DEFAULT '',
PRIMARY KEY (ID)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
DELIMITER $$
CREATE PROCEDURE insert_query_test(IN cnt INTEGER, IN tb VARCHAR(64))
BEGIN
DECLARE char_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
DECLARE return_str varchar(255) DEFAULT '';
DECLARE i int;
set i=1;
while i<=cnt DO
SET return_str = concat(return_str, substring(char_str, FLOOR(1 + RAND()*62), 1));
set @stmt = CONCAT('INSERT INTO ',tb,' (NAME) VALUES("',return_str,'");');
PREPARE stmt_pre FROM @stmt;
EXECUTE stmt_pre;
DEALLOCATE PREPARE stmt_pre;
SET i = i + 1;
end while;
END$$
DELIMITER ;
SELECT * FROM query_test;
SELECT ID FROM query_test;
从聚簇索引的结构上看,叶子节点实际存储了索引值和具体的行数据。有一点不解的是,两个查询应该都扫描了聚簇索引的叶子节点(包括索引键和行数据),但是为什么查询 2 和快于查询 1 呢?
会不会是select *
的查询数据量多于select id
造成的?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.