按索引查询(如%MYSQL)进行的搜索速度较慢
我有一张10万行这么大的桌子。 表的结构按索引查询(如%MYSQL)进行的搜索速度较慢,mysql,performance,indexing,sql-like,Mysql,Performance,Indexing,Sql Like,我有一张10万行这么大的桌子。 表的结构 id int INDEX(not primary not unique just index) lang_index varchar(5) INDEX name varchar(255) INDEX enam varchar(255) INDEX 嗯。我确实有疑问 1查询 "SELECT name FROM table WHERE lang_index='en' AND name LIKE
id int INDEX(not primary not unique just index)
lang_index varchar(5) INDEX
name varchar(255) INDEX
enam varchar(255) INDEX
嗯。我确实有疑问
1查询
"SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'"
这个大桌子的速度还可以。大约0.02秒
我试着
2查询
非常非常慢,大约230秒
那我试试这个
3查询
速度太快了。大约0.02秒
然后我将我的第二个查询分解为两个查询1和3,查询速度更快。大约0.04秒,但并不简单
为什么我的查询很慢?两个查询比一个查询快得多。
我需要从lang_index='en'和类似'myname%'或类似'myname%'的enam的表中选择名称
如何加快速度?OR关键字让MySQL的优化器疯狂
你可以试试这样的
SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
UNION
SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'
或者如果你的表有MyISAM访问,你可以考虑全文搜索。< /P> 编辑* 很难确切知道这些优化的事情到底发生了什么。你能试试这个吗?这将查看语言选择是否会影响您
SELECT name
FROM table
WHERE (name LIKE 'myname%' OR enam LIKE 'myname%')
你能试试这个吗
SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
UNION ALL
SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'
它不会给出一个完美的结果——它会有重复的名称项——但它会跳过查询中一个独特的重复数据消除步骤
你也可以试试这个
SELECT name
FROM table
WHERE lang_index='en'
AND id IN (
SELECT id from table
WHERE (name LIKE 'myname%' OR enam LIKE 'myname%'))
你的问题怎么解释?解释说。。。id select_type table type可能的_keys key len ref rows额外1个简单的lal ref lang_index,name,eman lang_index 18 const 2048048使用where谢谢,但我会尝试测试您的每个查询。一切都很慢。我在版本上停止了两个查询。我无法理解mysql的逻辑,我尝试查看每个查询的解释信息,所有ok mysql都使用索引,但速度很慢。更快的结果-使用两个查询。谢谢你们帮我,伙计们。再次感谢。
SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
UNION ALL
SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'
SELECT name
FROM table
WHERE lang_index='en'
AND id IN (
SELECT id from table
WHERE (name LIKE 'myname%' OR enam LIKE 'myname%'))