2017-05-07 48 views
0

我做一个简单的SELECT(有和没有LIMIT 1试过)...MariaDB的10.1简单的选择多少秒大型数据库

SELECT * FROM `links_db` WHERE `link` LIKE '__some_url__' ; // 9.45 sec 
SELECT * FROM `links_db` WHERE `link` LIKE '__some_url__' LIMIT 1 ; // 8 sec 
SELECT `link` FROM `links_db` WHERE `link` LIKE '__some_url__' ; // 5 sec 
SELECT `link` FROM `links_db` WHERE `link` LIKE '__some_url__' LIMIT 1 ; // 5 sec 

但问题是,我的数据库是300 MB ...需要5秒钟,进行了这种单一和简单的任务...

我升级从MySQL 5.5到10.1 MariaDB的,但蒸馏室5秒......

有my.cnf中的设置,可以帮助使SELECT更快?

+0

你的表有多少行?你有索引吗?如果您正在查找完全匹配,请使用'='。这似乎并没有与PHP相关.. – chris85

+0

你能提供一个实际的查询吗? – Strawberry

+0

该表有70 000行... with =而不是像5秒而不是9 –

回答

0

我认为某件事情是错误的my.cnf中......

我删除了所有行(让MariaDB的有它自己的默认值)exept那几个:

[mysqld] 
performance-schema=1 
tmpdir=/home/tmp 
general_log=0 
slow_query_log=0 
innodb_file_per_table=1 
default-storage-engine=InnoDB 
innodb_buffer_pool_size=2000M 

和SELECT从传递9秒为140ms)

0

(要多的评论)

300MB为70K行。?你有一些宽列?

索引是否为link索引?

我们来看看SHOW CREATE TABLE

您删除了哪些设置?如果你盲目地设置了很多很重要的东西,那可能会导致性能问题 - 通常是因为内存不足。

你有多少RAM?

如果您没有link索引,则所有这些查询都将以相同方式执行(请参见EXPLAIN)。该表将被扫描,检查LIKE的每一个。如果表中的这样的行是提前,那么LIMIT 1将很快停止。 (所以我认为没有这样的。)与SELECT *,所有的列都收集;这需要更多的努力。

请勿设置大于50M的query_cache_size

+0

你是什么意思“是链接索引?” –

+0

@JohnR - 我的手指有时会摸索。该列索引?请提供'SHOW CREATE TABLE links_db',以便我们可以看到以及其他细节。 –

+0

在CREATE是这样的:CREATE TABLE'links'( 'link_id' INT(255)无符号NOT NULL AUTO_INCREMENT, 'link'文本COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY('link_id') )ENGINE = InnoDB的AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; –