最简单的数据库优化





在使用mysql或者其他数据库,对于一些新手来说,优化真的无从下手,那我今天就给大家讲讲,select优化如何做到优化?(大神请忽略)
sql查询语句优化,一般是对于多表来说的,今天我不讲建库建表优化,也不讲索引,关于索引,以后再给大家讲讲。


一、好了,进入主题


我建三个表:b1
DROP TABLE IF EXISTS `b1`;
CREATE TABLE `b1` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
表b2
DROP TABLE IF EXISTS `b2`;
CREATE TABLE `b2` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


表b3
DROP TABLE IF EXISTS `b3`;
CREATE TABLE `b3` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
分别插入十条数据
INSERT INTO `b1` VALUES ('1', '1n1');
INSERT INTO `b1` VALUES ('2', '1n2');
INSERT INTO `b1` VALUES ('3', '1n3');
INSERT INTO `b1` VALUES ('4', '4');
INSERT INTO `b1` VALUES ('5', '5');
INSERT INTO `b1` VALUES ('6', '6');
INSERT INTO `b1` VALUES ('7', '7');
INSERT INTO `b1` VALUES ('8', '8');
INSERT INTO `b1` VALUES ('9', '9');
INSERT INTO `b1` VALUES ('10', '10');


INSERT INTO `b2` VALUES ('1', '1n1');
INSERT INTO `b2` VALUES ('2', '1n2');
INSERT INTO `b2` VALUES ('3', '1n3');
INSERT INTO `b2` VALUES ('4', '4');
INSERT INTO `b2` VALUES ('5', '5');
INSERT INTO `b2` VALUES ('6', '6');
INSERT INTO `b2` VALUES ('7', '7');
INSERT INTO `b2` VALUES ('8', '8');
INSERT INTO `b2` VALUES ('9', '9');
INSERT INTO `b2` VALUES ('10', '10');


INSERT INTO `b3` VALUES ('1', '1n1');
INSERT INTO `b3` VALUES ('2', '1n2');
INSERT INTO `b3` VALUES ('3', '1n3');
INSERT INTO `b3` VALUES ('4', '4');
INSERT INTO `b3` VALUES ('5', '5');
INSERT INTO `b3` VALUES ('6', '6');
INSERT INTO `b3` VALUES ('7', '7');
INSERT INTO `b3` VALUES ('8', '8');
INSERT INTO `b3` VALUES ('9', '9');
INSERT INTO `b3` VALUES ('10', '10');




现在进行多表查询
1、笛卡尔基


mysql> select count(*) from b1,b2,b3;
+----------+
| count(*) |
+----------+
|     1000 |
+----------+
1 row in set
可以看到有100条数据,也就是说,我如果在sql语句后面加上where或者having,那么查询结果就会在这1000条中产生。
2、内连接查询一条数据


mysql> select count(*) from (select * from b1 where id=1) b1,(select * from b2 where id=1) b2,(select * from b3 where id=1) b3;
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set
大家可以看到,这里是一条结果,如果我在后面加上where或者having,那么结果就在这一条结果产生,1+10+10+10=31,哈哈哈,发现了没?这里总共用了31条记录,




3、内连接IN 
mysql> select count(*) from (select * from b1 where id in(1,2,3)) b1,(select * from b2 where id in(1,2,3)) b2,(select * from b3 where id in(1,2,3)) b3;
+----------+
| count(*) |
+----------+
|       27 |
+----------+
1 row in set
这里一共57条,如果没必要查询笛卡尔基的结果,那么还请费点事,多写一点sql语句吧!


好了,就这样了,大家还有什么好的建议,请留言!谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值