建立一个网站多少钱/网红推广团队去哪里找
最近用索引时发现,聚合索引的使用顺用与索引的生效息息相关,我这是好久不用数据库了,表示都忘关了,今天才发现这个严重的问题,记录下吧。
以下场景使用tbl_detail表作为例子。
表中经常使用的字段是,tradedetail_id、pay_status、parnter_id,如果单独给这三个字段建立索引,比如以下sql:
select * from tbl_detail where tradedetail_id=1010;
select * from tbl_detail where pay_status='00';
select * from tbl_detail where parnter_id=1000;
如果在tradedetail_id上在增加pay_status索引这个,这个时候使用聚合索引(tradedetail_id,pay_status),
但如果是
select * from tbl_detail where tradedetail_id=1010 and pay_status='00';
这个时候使用单个索引与聚合索引的执行过程就是不一样的了,
使用单独的两个索引执行过程:在第一个索引查询的集合s1中在执行第二个索引的查询
使用聚合索引则是执行一个联合索引查询
针对聚合索引生效的索引是
(tradedetail_id)
(tradedetail_id,pay_status)
(tradedetail_id,pay_status,parnter_id)
举例:
select * from tbl_detail where tradedetail_id=1010 and pay_status='00'; 走索引(tradedetail_id,pay_status);
select * from tbl_detail where tradedetail_id=1010 and parnter_id=1000; 只走tradedetail_id索引,不走partner_id索引;
select * from tbl_detail where tradedetail_id=1010 and parnter_id=1000 and pay_status='00';
select * from tbl_detail where tradedetail_id=1010 aand pay_status='00' nd parnter_id=1000;
上面两条语句,效果是一样样的,走索引(tradedetail_id,pay_status,parnter_id)
下面是分析语句的执行情况,在sql语句中使用关键字 explain 即可查看语句执行情况,每个字段的属性含义不在复述,大家可以去网上查找下资料
补充下索引的相关知识
索引失效的情况:
对于多列索引,不是使用的第一部分,则不会使用索引
or关键字、like查询以“%”开头
查询参数的字段类型,比如查询参数是数字类型,却使用了引号,这会导致索引失效
对索引列进行运算时,会导致索引失效,运算符包括(+、-、/、* 、!等)(后期还会在继续补充)
在索引存在插入数据跟没有索引插入数据相比较,有索引插入数据更慢些,下面使用存储过程完成的测试,从数据上看确实没有太大的差距,不知在实际程序上会不会有更慢的性能问题
没有索引的情况
索引存在的情况