【发布时间】:2014-10-24 17:37:39
【问题描述】:
显然,从 100 万条记录中选择一个文本字段会很慢,不推荐使用。这里有两种可能的解决方案。
将数据库拆分为每个用户自己的数据库或表,从而显着减少每个表中的总记录数。
执行 SQL SELECT 查询以匹配一个 INT,其中 INT 是用户 ID,然后匹配文本字段。
选项 1 将提供明显的性能提升。但选项 2 是否也能带来收益?在语句中,如果我们首先匹配 INT,这是否会将结果集缩小到仅匹配的记录,然后执行文本字段搜索。比如……
$user_id = 1001;
$domain_name = "mydomain.com";
$query = $database->prepare("SELECT * FROM domains_table WHERE user_id = $user_id && domain_name = $domain_name");
在上述查询中切换 user_id 和 domain_name 的位置会破坏性能。在这里首先匹配 user_id 有优势吗?
【问题讨论】:
-
EXPLAIN对您的查询变体有何看法?你对它们进行了基准测试吗?您是否真的使用TEXT字段作为域名(为什么),或者是VARCHAR?该字段是否已编入索引? -
@DCoder 我使用 CHAR(36) 而不是 VARCHAR 来获得性能提升,因为这样会更快。同意吗?
-
为什么你认为 100 万条记录会很慢并且不推荐? 100 万是非常小的 - 确保你有你的列索引。第一个选项听起来像是一场噩梦,甚至可能会导致性能损失。