如何加快mysql表的搜索速度?

时间:2015-11-09 07:13:14

标签: mysql sql

我有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 ...表上真正的分区表? 谢谢!

3 个答案:

答案 0 :(得分:2)

将索引添加到where子句中使用的列,它肯定会提高处理速度。

答案 1 :(得分:0)

你必须设置至少一个唯一字段,否则所有字段组合将被视为键,这会使它变慢。

答案 2 :(得分:0)

你使用什么引擎? MyIsam在读取操作和全文搜索方面更快。见这个讨论。 When to use MyIsam and Innodb

编辑:我注意到您在create table查询中指定了引擎。所以你应该考虑使用MyIsam引擎而不是innodb。