繁体   English   中英

如何简化这些索引以提高SQL查询的性能

[英]How to simplify these indexes to increase performance of SQL queries

我在给定顺序的不同SQL查询的WHERE子句中使用以下字段。 我应该在单个列上创建索引,还是应该创建复合索引。 如何简化以下内容以创建性能更好的更少索引。

会员表

member_id (primary key)
WHERE user_id = $user_id AND member_id = $member_id
WHERE user_id = $user_id AND name LIKE '%$keywords%'
WHERE user_id = $user_id AND expiry_date < CURDATE()
WHERE user_id = $user_id AND expiry_date BETWEEN '1990-01-01' AND '2000-01-01'

付款表

payment_id (primary key)
WHERE user_id = $user_id AND member_id = $member_id
WHERE user_id = $user_id AND member_id = $member_id AND payment_id = $payment_id

这里没有提及“用户”表,它实际上是主帐户表,成员表中有许多成员

假设您的表是InnoDB:

WHERE user_id = $user_id AND expiry_date < CURDATE()

(user_id, expiry_date)创建索引

WHERE user_id = $user_id AND name LIKE '%$keywords%'

这不会从索引中受益,因为您所使用的类似条件不可保留。 不过,您可以在(user_id, name)上创建覆盖索引。

WHERE user_id = $user_id AND member_id = $member_id

不需要索引,因为member_id是主键

WHERE user_id = $user_id AND member_id = $member_id AND payment_id = $payment_id

由于payment_id是主键,因此不需要索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM