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

How to simplify these indexes to increase performance of SQL queries

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

成员table

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'

付款table

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

"users"table这里就不提了,其实就是memberstable

里面有很多成员的主账号table

假设您的表是 InnoDB:

WHERE user_id = $user_id AND expiry_date < CURDATE()

(user_id, expiry_date)

上创建索引

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

这不会从索引中获益,因为您使用的 like 条件不可搜索。不过,您可以在 (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 是主键。