Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按索引查询(如%MYSQL)进行的搜索速度较慢_Mysql_Performance_Indexing_Sql Like - Fatal编程技术网

按索引查询(如%MYSQL)进行的搜索速度较慢

按索引查询(如%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

我有一张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 '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%'))