gpt4 book ai didi

php - 多列索引

转载 作者:行者123 更新时间:2023-11-29 02:16:34 24 4
gpt4 key购买 nike

我必须对一个超过 1000 万行的表运行查询。表结构为

user(varchar 100),
played(int 11),
won(int 11),
lost(int 11),
drawn(int 11),
user1(varchar 30),
user2(varchar 30).


Where
User - primary key
user1 - index
user2 - index

MySql 数据库引擎是 MyISAM。

我的问题是——当我运行以下查询时,它花费的时间超过 17 秒。

SELECT * FROM h2hstats
WHERE (won+lost+drawn) > 5
AND (user1 = '717054941' OR user2 = '717054941')

我怎样才能减少这个执行时间?

我会在 (won+lost+drawn) 列上创建另一个索引吗?

最佳答案

首先,如果用户列是数字,那么不要对常量使用单引号。这会使优化器感到困惑。这可能对您的查询没有帮助(我的 SQL 在为 OR 使用索引方面做得很差),但值得一试。

接下来,考虑将查询重写为:

SELECT *
FROM h2hstats
WHERE (won + lost + drawn) > 5 AND user1 = 717054941
UNION ALL
SELECT *
FROM h2hstats
WHERE (won + lost + drawn) > 5 AND user2 = 717054941 ;

MySQL 肯定会为每个子查询使用索引。这应该会提高性能。

(注意:此版本假定 user1 <> user2。如果可能,您可能希望使用 UNION 而不是 UNION ALL.)

关于php - 多列索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38654800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com