我有MySQL表
CREATE TABLE IF NOT EXISTS `users` (
`IDClient` int(11) NOT NULL,
`Phone` varchar(15) NOT NULL,
`passw` varchar(32) NOT NULL,
`ip` varchar(50) DEFAULT NULL COMMENT 'IP адрес'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY KEY (Phone)
PARTITIONS 10 */;
ALTER TABLE `users`
ADD PRIMARY KEY (`Phone`),
ADD KEY `IDClient` (`IDClient`),
ADD KEY `ip` (`ip`);
大约有300万条记录。当站点有点加载时,sql请求
SELECT * FROM users WHERE phone='9123456789' LIMIT 1
需要大约0.03秒,但是当此次加载的网站最多可以达到5秒。 谁在这个主题,可以有任何建议吗?对于这样一个微不足道的请求,我认为甚至0.03秒。
explain SELECT * FROM `users` where Phone="9123456789" limit 1
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE users const PRIMARY PRIMARY 47 const 1 NULL
也许它有助于2,5,10 ...表上真正的分区表? 谢谢!
答案 0 :(得分:2)
将索引添加到where子句中使用的列,它肯定会提高处理速度。
答案 1 :(得分:0)
你必须设置至少一个唯一字段,否则所有字段组合将被视为键,这会使它变慢。
答案 2 :(得分:0)
你使用什么引擎? MyIsam在读取操作和全文搜索方面更快。见这个讨论。 When to use MyIsam and Innodb
编辑:我注意到您在create table查询中指定了引擎。所以你应该考虑使用MyIsam引擎而不是innodb。