🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> 使用联合索引时,索引列的定义顺序将会影响到最终查询时索引的使用情况 > 例如联合索引(a,b,c),mysql会从最左边的列优先匹配,如果最左边的a没有使用到,在未使用覆盖索引的情况下,就只能全表扫描。 联合底层数据结构思考,mysql会优先以联合索引第一列匹配,此后才会匹配下一列,如果不指定第一列匹配的值,也就无法得知下一步查询哪个节点。 另外还有一种情况,如果遇到 `>|<|between|like`等这样的范围查询,那B+树中也就无法对下一列进行等值匹配了 在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例: 对列col1、列col2和列col3建一个联合索引 ~~~ KEY test_col1_col2_col3 on test(col1,col2,col3); ~~~ 联合索引 test\_col1\_col2\_col3 实际建立了(col1)、(col1,col2)、(col,col2,col3)三个索引。 ~~~ SELECT * FROM test WHERE col1=“1” AND clo2=“2” AND clo4=“4” ~~~ 上面这个查询语句执行时会依照最左前缀匹配原则,检索时会使用索引(col1,col2)进行数据匹配