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

数据库服务和管理,MySQL/PostgreSQL/Oracle/Sybase 等
回复
头像
百草谷居士
帖子: 3105
注册时间: 2006-02-10 16:36
系统: ubuntu18.04/Win10
送出感谢: 24 次
接收感谢: 36 次
联系:

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

#1

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

在一个sqlite数据表内,已经按照“门店+日期+流水号”建立一个主索引。在日常应用中,会经常以门店,或者日期为条件,或者分组进行查询操作。
那么,在已经存在“门店+日期+流水号”复合索引模式下,是否还有必要再以“门店”,“日期”建立单独的索引,以加快查询速度?
友帮拓,真难听。有没有接触官方的老大?给改了吧!
一直想找一个在linux下的Visual FoxPro/access桌面数据库。MUIBase还算是最相近的。
头像
astolia
论坛版主
帖子: 3751
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 634 次

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一节。
这些用户感谢了作者 astolia 于这个帖子:
百草谷居士 (2019-05-16 21:16)
评价: 3.7%
头像
百草谷居士
帖子: 3105
注册时间: 2006-02-10 16:36
系统: ubuntu18.04/Win10
送出感谢: 24 次
接收感谢: 36 次
联系:

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

#3

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

明白这个意思了,谢谢!
另外感谢你提供这个sqlite教学网站
ps:
在网上搜索了一下,这个通常称为:“联合索引最左匹配”原则。
也就是说:如果where或者group by子句的条件是按照索引的顺序,则会按照最左优先匹配的原值,优先使用索引进行匹配。
可以充分利用索引的运算符是等于,包括:=,in,is 运算符。
经过系统自动优化可以利用索引的运算符包括: >,<,between,以及左侧固定字符的like 'string%'。
而像右侧模糊匹配的like运算符是无法利用索引优化的,比如:like '%string',like '%string%'。
友帮拓,真难听。有没有接触官方的老大?给改了吧!
一直想找一个在linux下的Visual FoxPro/access桌面数据库。MUIBase还算是最相近的。
回复

回到 “数据库管理”