我的SQL 语句是:
select distinct item.item_id as itemId,(case when item_name like '%qq%' then 1 else 0) as matchNum,from item whern item_name like '%qq%' order by matchNum limit 10
我想问下,如果在matchNum上建立临时索引。?
因为我想尽可能的提高查询效率
select distinct item.item_id as itemId,(case when item_name like '%qq%' then 1 else 0) as matchNum,from item whern item_name like '%qq%' order by matchNum limit 10
我想问下,如果在matchNum上建立临时索引。?
因为我想尽可能的提高查询效率
解决方案 »
- 为什么用SQLyog把EXCEL表中的数据导入到数据库中以后,中文没法读
- \MySQL Server 5.5 主从同步报错unknown variable 'master-host=192.168.8.111'
- mysql行转列问题
- 通过查询更新
- 初始值
- 一个棘手的数据库应用问题!!大家多多帮忙啊!!
- MYSql For Windows版30天试用期后是否就不能用了?
- 在linux下用写好的.sql文本如何建表?
- 求救:can not connect to mysql server(10061)是怎么回事?
- 怎样根据一个属性将一张表的数据复制到另一张表,并记录当前系统时间
- 2003系统 安装mysql 问题 在线等!!急急
- mysql API BLOB数据的读写
这个貌似有点没必要..whern item_name like '%qq%'
既然你的条件要查item_name存在qq字样的..那在SELECT的时候.ITEM_NAME就肯定有qq字样的.
所以你在WHERE里的LIKE在用通配符打头..索引用不上.
select distinct item.item_id as itemId,(case when item_name like '%qq%' then 1 else 0)
as matchNum from item whern item_name like '%qq%'create index newtt on lsb(matchNum)select * from lsb order by matchNum limit 10 而且我的case也并不是唯一的,这个是用户输入的关键字,不确定的
那么值是否固定,比如0、1
当执行联结时,从其他表检索行。
对特定的索引列找出MAX()或MIN()值。
如果排序或分组在一个可用键的最左面前缀上进行(例如,ORDER BY key_part_1,key_part_2),排序或分组一个表。如果所有键值部分跟随DESC,键以倒序被读取。
在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。如果对某些表的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从索引树被检索出来。
假定你发出下列SELECT语句: mysql> SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;如果一个多列索引存在于col1和col2上,适当的行可以直接被取出。如果分开的单行列索引存在于col1和col2上,优化器试图通过决定哪个索引将找到更少的行并来找出更具限制性的索引并且使用该索引取行。 如果表有一个多列索引,任何最左面的索引前缀能被优化器使用以找出行。例如,如果你有一个3行列索引(col1,col2,col3),你已经索引了在(col1)、(col1,col2)和(col1,col2,col3)上的搜索能力。 如果列不构成索引的最左面前缀,MySQL不能使用一个部分的索引。假定你下面显示的SELECT语句: mysql> SELECT * FROM tbl_name WHERE col1=val1;
mysql> SELECT * FROM tbl_name WHERE col2=val2;
mysql> SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;如果一个索引存在于(col1、col2、col3)上,只有上面显示的第一个查询使用索引。第二个和第三个查询确实包含索引的列,但是(col2)和(col2、col3)不是(col1、col2、col3)的最左面前缀。 如果LIKE参数是一个不以一个通配符字符起始的一个常数字符串,MySQL也为LIKE比较使用索引。例如,下列SELECT语句使用索引: mysql> select * from tbl_name where key_col LIKE "Patrick%";
mysql> select * from tbl_name where key_col LIKE "Pat%_ck%";在第一条语句中,只考虑有"Patrick" <= key_col < "Patricl"的行。在第二条语句中,只考虑有"Pat" <= key_col < "Pau"的行。 下列SELECT语句将不使用索引: mysql> select * from tbl_name where key_col LIKE "%Patrick%";
mysql> select * from tbl_name where key_col LIKE other_col;在第一条语句中,LIKE值以一个通配符字符开始。在第二条语句中,LIKE值不是一个常数。 如果 column_name 是一个索引,使用column_name IS NULL的搜索将使用索引。 MySQL通常使用找出最少数量的行的索引。一个索引被用于你与下列操作符作比较的列:=、>、>=、<、<=、BETWEEN和一个有一个非通配符前缀象'something%'的LIKE的列。 任何不跨越的在WHERE子句的所有AND层次的索引不用来优化询问。 下列WHERE子句使用索引:... WHERE index_part1=1 AND index_part2=2
... WHERE index=1 OR A=10 AND index=2 /* index = 1 OR index = 2 */
... WHERE index_part1='hello' AND index_part_3=5
/* optimized like "index_part1='hello'" */这些WHERE子句不使用索引: ... WHERE index_part2=1 AND index_part3=2 /* index_part_1 is not used */
... WHERE index=1 OR A=10 /* No index */
... WHERE index_part1=1 OR index_part2=10 /* No index spans all rows */