MYSQL数据库MySQL中使用or、in与union all在查询命令下的效率对
《MYSQL数据库MySQL中使用or、in与union all在查询命令下的效率对比》要点: MYSQL应用OR、in和union all 查询效率到底哪个快? MYSQL应用
EXPLAIN SELECT * from employees where employees.first_NAME ='Georgi' UNION ALL SELECT * from employees where employees.first_NAME ='Bezalel'
MYSQL应用这条语句执行结果481条,执行时间为0.35s MYSQL应用
PRIMARY employees ALL 300141 Using where
UNION employees ALL 300141 Using where
UNION RESULT <union1,2> ALL
explain SELECT * FROM employees WHERE employees.first_name IN ('Georgi','Bezalel')
MYSQL应用这条语句的执行结果时间为0.186s MYSQL应用
SIMPLE employees ALL 300141 Using where
explain SELECT * FROM employees WHERE employees.first_name ='Georgi' or employees.first_name='Bezalel'
MYSQL应用这条语句的执行结果和in的结果差不多 MYSQL应用难道是网上的说法有误?难道和索引有关?在firstname上建立了一个索引 MYSQL应用重新执行 MYSQL应用union的执行执行计划如下,执行时间为0.004s MYSQL应用
PRIMARY employees ref index_firstname index_firstname 44 const 253 Using where
UNION employees ref index_firstname index_firstname 44 const 228 Using where
UNION RESULT <union1,2> ALL
MYSQL应用in的执行计划如下,执行时间也为0.004s MYSQL应用
SIMPLE employees range index_firstname index_firstname 44 481 Using where
MYSQL应用or的执行计划如下,执行时间也为0.004s MYSQL应用
SIMPLE employees range index_firstname index_firstname 44 481 Using where
MYSQL应用感觉性能差不多啊.但是注意执行计划中的type,ref要好于range哦(ref为非唯一性索引扫描,range为索引范围扫描) MYSQL应用要不我再试试主键,这个是唯一的,会不会和网上的效果一直呢? MYSQL应用
EXPLAIN SELECT * FROM employees WHERE employees.EMP_NO=100001 UNION ALL SELECT * FROM employees WHERE employees.EMP_NO=101100
MYSQL应用union的执行计划如下 MYSQL应用
PRIMARY employees const PRIMARY PRIMARY 4 const 1
UNION employees const PRIMARY PRIMARY 4 const 1
UNION RESULT <union1,2> ALL
EXPLAIN SELECT * FROM employees WHERE employees.EMP_NO IN (100001,101100)
MYSQL应用in的执行计划如下 MYSQL应用
SIMPLE employees range PRIMARY PRIMARY 4 2 Using where
EXPLAIN SELECT * FROM employees WHERE employees.EMP_NO=100001 OR emp_no=101100
MYSQL应用or的执行计划如下 MYSQL应用
SIMPLE employees range PRIMARY PRIMARY 4 2 Using where
MYSQL应用感觉结果和第二个实验还是差不多. MYSQL应用 MYSQL应用
drop table if EXISTS BT;
create table BT(
ID int(10) NOT NUll,VName varchar(20) DEFAULT '' NOT NULL,PRIMARY key( ID )
)ENGINE=INNODB;
MYSQL应用?该表只有两个字段 ID为主键【索引页类似】,一个是普通的字段.(偷懒就用简单的表结构呢) MYSQL应用
INSERT INTO BT ( ID,VNAME ) VALUES( i,CONCAT( 'M',i ) );---1
MYSQL应用??? 修改为 MYSQL应用
INSERT INTO BT ( ID,i,'TT' ) );---2
MYSQL应用?? 修改原因在 MYSQL应用
DROP PROCEDURE IF EXISTS test_proc;
CREATE PROCEDURE test_proc()
BEGIN
declare i int default 0;
set autocommit = 0;
while i<10000000 do
INSERT INTO BT ( ID,i ) );
set i = i+1;
if i%2000 = 0 then
commit;
end if;
end while;
END;
MYSQL应用?就不写注释呢,挺简单的. MYSQL应用 MYSQL应用2:实战 MYSQL应用 MYSQL应用时间都为0.00,怎么会这样呢,呵呵所有查询都是在毫秒级别. MYSQL应用 MYSQL应用这里要注意的字段type 与ref字段 MYSQL应用 MYSQL应用我们发现为啥union all查询时间几乎为 or 和in的三倍. MYSQL应用 MYSQL应用这里我们发现计划几乎一样. MYSQL应用3:总结 MYSQL应用
select * from bt where bt.VName = 'M98' or bt.id ='9888589'
select * from bt where bt.VName = 'M98'
UNION ALL
select * from bt where bt.id = '9888589'
MYSQL应用???? 该两个查询速度相差多少 主要取决于 索引列查询时长,如索引列查询时间太长的话,那你也用or或者in代替吧. 欢迎参与《MYSQL数据库MySQL中使用or、in与union all在查询命令下的效率对比》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |