如何简化这些索引以提高 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
是主键。
我在给定顺序的不同 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
是主键。