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

24 浏览
0 Comments

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

我有一个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
0 Comments

使用MyIsam引擎可以加快搜索速度,特别是对于读取操作和全文搜索更为快速。可以参考这个讨论:When to use MyIsam and Innodb

编辑:我注意到你在创建表查询中指定了引擎。因此,你应该考虑使用MyIsam引擎而不是Innodb。

0
0 Comments

如何加速mysql表的搜索?

在使用mysql表进行搜索时,有时会出现搜索速度慢的情况。这可能是由于以下原因引起的:

1. 没有在where子句中使用的列上添加索引。添加索引可以显著提高处理速度。

解决方法是在where子句中使用的列上添加索引。例如,可以使用以下语句添加索引:

ALTER TABLE table_name ADD INDEX index_name (column_name);

2. 已经存在索引,但是是主键索引。主键索引是默认的索引,但在某些情况下可能不够高效。

解决方法是尝试将索引添加到主键列上。可以使用以下语句添加索引:

ALTER TABLE table_name ADD INDEX index_name (primary_key_column);

3. 创建一个存储过程。存储过程是一种预编译的数据库对象,可以提高搜索性能。

解决方法是创建一个存储过程,将搜索逻辑封装在其中。可以使用以下语句创建存储过程:

CREATE PROCEDURE procedure_name

BEGIN

-- 添加搜索逻辑

END;

通过以上方法,可以有效地加速mysql表的搜索。

0
0 Comments

如何加速mysql表中的搜索?

问题原因:如果没有设置至少一个唯一字段,那么所有字段的组合将被视为键,这会导致搜索速度变慢。

解决方法:确保设置了至少一个唯一字段,通常是主键字段。但是也可以设置非唯一索引。

代码示例:

-- 创建表时设置主键
CREATE TABLE table_name (
  id INT PRIMARY KEY,
  ...
);
-- 创建表时设置非唯一索引
CREATE TABLE table_name (
  ...
  INDEX index_name (column_name)
);

通过以上方法,可以提高mysql表的搜索速度。

0