复合索引是否同时具备单独索引功效?

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
头像
百草谷居士
帖子: 3935
注册时间: 2006-02-10 16:36
系统: debian12/xubuntu2404

复合索引是否同时具备单独索引功效?

#1

帖子 百草谷居士 » 2019-05-16 10:00

在一个sqlite数据表内,已经按照“门店+日期+流水号”建立一个主索引。在日常应用中,会经常以门店,或者日期为条件,或者分组进行查询操作。
那么,在已经存在“门店+日期+流水号”复合索引模式下,是否还有必要再以“门店”,“日期”建立单独的索引,以加快查询速度?
debian 12.5 / xubuntu 24.04

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
头像
astolia
论坛版主
帖子: 6514
注册时间: 2008-09-18 13:11

Re: 复合索引是否同时具备单独索引功效?

#2

帖子 astolia » 2019-05-16 17:25

要看情况。简单说来就是查询时的列顺序要符合你创建索引时的顺序。
如果你创建索引时的列顺序是A B ...,那么查询A、A and B可以用到索引,但查B、B and A就不行
详细可参考http://www.sqlitetutorial.net/sqlite-index/中SQLite multicolumn index example一节。
头像
百草谷居士
帖子: 3935
注册时间: 2006-02-10 16:36
系统: debian12/xubuntu2404

Re: 复合索引是否同时具备单独索引功效?

#3

帖子 百草谷居士 » 2019-05-16 21:15

明白这个意思了,谢谢!
另外感谢你提供这个sqlite教学网站
ps:
在网上搜索了一下,这个通常称为:“联合索引最左匹配”原则。
也就是说:如果where或者group by子句的条件是按照索引的顺序,则会按照最左优先匹配的原值,优先使用索引进行匹配。
可以充分利用索引的运算符是等于,包括:=,in,is 运算符。
经过系统自动优化可以利用索引的运算符包括: >,<,between,以及左侧固定字符的like 'string%'。
而像右侧模糊匹配的like运算符是无法利用索引优化的,比如:like '%string',like '%string%'。
debian 12.5 / xubuntu 24.04

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
回复