Mysql 如何加快MariaDB中数据子集的选择

Mysql 如何加快MariaDB中数据子集的选择,mysql,performance,mariadb,Mysql,Performance,Mariadb,我有一个巨大的表,其中包含大量数据(170GB压缩大小,380万行),我想选择这些数据的子集 此子集由URI列表定义。我的表中包含URI的列上有一个哈希索引 因此,简单的查询是 SELECT * FROM mytable WHERE uri IN ("uri1","uri2","uri") 但是这个查询速度太慢了。对于大约190个URI,它会持续6个多小时 Query OK, 240777 rows affected (6 hours 46 min 1.34 sec) 有没有办法加快选择的速

我有一个巨大的表,其中包含大量数据(170GB压缩大小,380万行),我想选择这些数据的子集

此子集由URI列表定义。我的表中包含URI的列上有一个哈希索引

因此,简单的查询是

SELECT * FROM mytable WHERE uri IN ("uri1","uri2","uri")
但是这个查询速度太慢了。对于大约190个URI,它会持续6个多小时

Query OK, 240777 rows affected (6 hours 46 min 1.34 sec)
有没有办法加快选择的速度?目前,在外部工具中迭代整个数据库并转储相关行的速度更快

编辑

以下是对我的问题的解释:

+------+-------------+---------+-------+---------------+----------+---------+------+--------+-------------+
| id   | select_type | table   | type  | possible_keys | key      | key_len | ref  | rows   | Extra       |
+------+-------------+---------+-------+---------------+----------+---------+------+--------+-------------+
|    1 | SIMPLE      | SOURCES | range | site_uri      | site_uri | 257     | NULL | 421418 | Using where |
+------+-------------+---------+-------+---------------+----------+---------+------+--------+-------------+
1 row in set (0.00 sec)

在uri列上有索引吗

单是索引可能会有所帮助。如果不是,那么工会可以让事情变得更快(尽管相当丑陋):


在uri列上有索引吗

单是索引可能会有所帮助。如果不是,那么工会可以让事情变得更快(尽管相当丑陋):


也对这个问题的答案感兴趣。请发布查询和查询解释。您可以测试将搜索uri放在一个带有一个字段和索引的tmp表中,然后从tmptable t LEFT JOIN bigtable j ON t.uri=j.uri中选择j.*这种查询运行得快吗<代码>从mytable中选择*,其中uri=“uri1”请提供
SHOW CREATE TABLE
。也对这个问题的答案感兴趣。请发布查询和查询解释。您可以测试将搜索uri放入一个带有一个字段和索引的tmp表中,然后选择j.*从tmptable t LEFT JOIN bigtable j ON t.uri=j.uri这种查询运行得快吗
SELECT*FROM mytable WHERE uri=“uri1”
请提供
SHOW CREATE TABLE
。是的,uri列上有索引是的,uri列上有索引
SELECT * FROM mytable WHERE uri = "uri1"
UNION 
SELECT * FROM mytable WHERE uri = "uri2"
UNION
SELECT * FROM mytable WHERE uri = "uri"