select效率问题

qqwx_1986 2009-10-23 02:41:23
10W条记录 20个字段
select* from tabel;和 select col1 from table;效率差得大不大?ms级还是s级?
100w呢?
...全文
251 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqwx_1986 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 vinsonshen 的回复:]
10W条记录 20个字段
select*  from tabel;和 select col1 from table;效率差得大不大?ms级还是s级?
100w呢?

----------------------------------------
这个还用测试吗?
那么明显的东西啦
跟每条记录的大小、网络等速度有很大关系
假如每条记录1K,而col1是100字节

10W条记录,你算吧
[/Quote]
有理,不过有不同的需求,我自己慢慢测吧!!!
谢谢各位了
ACMAIN_CHM 2009-10-23
  • 打赏
  • 举报
回复
你的测试结果如何?

select * vs select fd
vinsonshen 2009-10-23
  • 打赏
  • 举报
回复
10W条记录 20个字段
select* from tabel;和 select col1 from table;效率差得大不大?ms级还是s级?
100w呢?

----------------------------------------
这个还用测试吗?
那么明显的东西啦
跟每条记录的大小、网络等速度有很大关系
假如每条记录1K,而col1是100字节

10W条记录,你算吧
qqwx_1986 2009-10-23
  • 打赏
  • 举报
回复
谢谢上面各位了 换成5.1.32就行了 版本问题 麻烦各位了
qqwx_1986 2009-10-23
  • 打赏
  • 举报
回复
5.0.24a-community-nt
ACMAIN_CHM 2009-10-23
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090626/16/65f043cf-b9d9-4707-b660-9857461177f4.html?14339

你可以直接使用下面语句,要求mysql 5.0 以上。

create table t_06 (
id int not null primary key,
c1 varchar(30),
i2 int
) engine = myisam;

delimiter //

CREATE PROCEDURE prepareData_t_06 ()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i < 500000 DO
insert into t_06 values (i,concat('AA',i),i);
SET i = i + 1;
END WHILE;
END;
//

delimiter ;

CALL prepareData_t_06();

select count(*) from t_06;
ACMAIN_CHM 2009-10-23
  • 打赏
  • 举报
回复
[Quote]不知道为什么都失败 应该不是语法问题
版本问题吗?[/Quote]

你的版本是什么?
WWWWA 2009-10-23
  • 打赏
  • 举报
回复
我是在MYSQL5。.1。32下测试通过的
qqwx_1986 2009-10-23
  • 打赏
  • 举报
回复
不知道为什么都失败 应该不是语法问题
版本问题吗?
WWWWA 2009-10-23
  • 打赏
  • 举报
回复
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`test1`$$

CREATE PROCEDURE `test`.`test1`()
BEGIN

DECLARE v_cnt DECIMAL (1) DEFAULT 0 ;
Dd:LOOP
INSERT INTO test.table1(t1,t2) VALUES (0,1);
COMMIT;
SET v_cnt = v_cnt+1 ;
IF v_cnt = 1000000 THEN LEAVE dd;
END IF;
END LOOP dd ;
END$$

DELIMITER ;
WWWWA 2009-10-23
  • 打赏
  • 举报
回复
OR
CREATE PROCEDURE `test`.`test1`()
BEGIN

DECLARE v_cnt DECIMAL (1) DEFAULT 0 ;
Dd:LOOP
INSERT INTO test.table1(t1,t2) VALUES (0,1);
COMMIT;
SET v_cnt = v_cnt+1 ;
IF v_cnt = 1000000 THEN LEAVE dd;
END IF;
END LOOP dd ;
END$$

DELIMITER ;
qqwx_1986 2009-10-23
  • 打赏
  • 举报
回复
Error Code : 1307
Failed to CREATE PROCEDURE test1
(0 ms taken)

崩溃
wwwwb 2009-10-23
  • 打赏
  • 举报
回复
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`test1`$$

CREATE PROCEDURE `test`.`test1`()
BEGIN

DECLARE v_cnt DECIMAL (1) DEFAULT 0 ;
dd:LOOP
INSERT INTO test.table1(t1,t2) VALUES (0,1);
COMMIT;
SET v_cnt=v_cnt+1;
IF p1 < 10 THEN ITERATE DD; END IF;
LEAVE DD;
END LOOP dd ;
END$$

DELIMITER ;
ACMAIN_CHM 2009-10-23
  • 打赏
  • 举报
回复
vinsonshen 2009-10-23
  • 打赏
  • 举报
回复
注意红色部分:
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`test1`$$

CREATE PROCEDURE `test`.`test1`()
BEGIN
declare v_cnt decimal (1) default 0 ;
dd:loop
insert into test.table1(t1,t2) values (0,1);
commit;
set v_cnt = v_cnt+1 ;
if v_cnt = 1000000 then leave dd;
end if;
end loop dd ;



END$$

DELIMITER ;
qqwx_1986 2009-10-23
  • 打赏
  • 举报
回复

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`test1`$$

CREATE PROCEDURE `test`.`test1`()

declare v_cnt decimal (1) default 0 ;
dd:loop
insert into test.table1(t1,t2) values (0,1);
commit;
set v_cnt = v_cnt+1 ;
if v_cnt = 1000000 then leave dd;
end if;
end loop dd ;

BEGIN

END$$

DELIMITER ;

这个怎么就错啦!!!


Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'declare v_cnt decimal (1) default 0 ;
dd:loop
insert into test.tabl' at line 2
(0 ms taken)
vinsonshen 2009-10-23
  • 打赏
  • 举报
回复
10W条记录 20个字段
------------------
这个要看你的每条记录的大小

select * from tabel;和 select col1 from table会随着每条记录的大小差异,每条记录越大显示越慢
ACMAIN_CHM 2009-10-23
  • 打赏
  • 举报
回复
[Quote]不好意思 我小菜一个 怎样往一个表里一次性插入大量的测试数据[/Quote]

你可以写个存储过程,循环 N 次.

具体的你可以参考一下帮助文档中的例子。
MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
qqwx_1986 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acmain_chm 的回复:]
这种问题最简单的方法就是自己实验一下。

自己建个表,然后测试一下就知道了。
[/Quote]
谢谢
不好意思 我小菜一个 怎样往一个表里一次性插入大量的测试数据
ACMAIN_CHM 2009-10-23
  • 打赏
  • 举报
回复
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 100000 |
+----------+
1 row in set (0.14 sec)

mysql> select * from t1 INTO OUTFILE 'aaa';
Query OK, 100000 rows affected (0.08 sec)

mysql> select id from t1 INTO OUTFILE 'aaa1';
Query OK, 100000 rows affected (0.09 sec)

mysql> select id from t1 INTO OUTFILE 'aaa2';
Query OK, 100000 rows affected (0.11 sec)

mysql> select id from t1 INTO OUTFILE 'aa3';
Query OK, 100000 rows affected (0.09 sec)

mysql>
加载更多回复(2)

56,937

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧