|
查看: 1150|回复: 22
|
optimize query
[复制链接]
|
|
|
发表于 7-1-2009 10:47 AM
|
显示全部楼层
|
试试 create index for Date and Desc column... |
|
|
|
|
|
|
|
|
|
|
select top 1 date, Desc from A
where Date >= '2008-12-10 15:31:30.000'
and Id = 5
and (desc like '%L1%' or desc like '%L2%')
order by date
请问以上的query可以怎样optimize?
我的data有2M,以上的query要2s来跑。。。太慢了。。。 |
|
|
|
|
|
|
|
|
|
|
发表于 30-12-2008 08:32 PM
|
显示全部楼层
原帖由 CoLoUrGhOsT 于 30-12-2008 05:31 PM 发表 
select top 1 date, Desc from A
where Date >= '2008-12-10 15:31:30.000'
and Id = 5
and (desc like '%L1%' or desc like '%L2%')
order by date
请问以上的query可以怎样optimize?
我的data有2M,以上的que ...
加 index 在 Id |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 31-12-2008 09:01 AM
|
显示全部楼层
没用。。。。一样慢。。。
一加了“and (desc like '%L1%' or desc like '%L2%')"这行就变很慢了。。。 |
|
|
|
|
|
|
|
|
|
|
发表于 31-12-2008 01:53 PM
|
显示全部楼层
原帖由 CoLoUrGhOsT 于 31-12-2008 09:01 AM 发表 
没用。。。。一样慢。。。
一加了“and (desc like '%L1%' or desc like '%L2%')"这行就变很慢了。。。
select top 1 date, Desc
from (select * from A where Id = 5) a
where Date >= '2008-12-10 15:31:30.000'
and (desc like '%L1%' or desc like '%L2%')
order by date
make sure got index id |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 31-12-2008 02:23 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 2-1-2009 09:44 PM
|
显示全部楼层
|
我想知道L1 和L2是在begin吗?如果是的话,for example, 用 LIKE 'L1%'就好了 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 5-1-2009 04:48 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 6-1-2009 10:18 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 6-1-2009 10:56 PM
|
显示全部楼层
我的text不一样的。。。
我要找text pattern like %L1% 和 %L2% 的。。。。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 7-1-2009 02:56 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 10-1-2009 01:41 PM
|
显示全部楼层
|
楼主,建议你把那几个column的资料告诉大家,比如datatype, index, 还有id是不是primary key?如果不是有什么primary key? |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 12-1-2009 10:58 AM
|
显示全部楼层
我的table structure:id int pk
offset int pk
date datetime pk
logid tinyint pk
desc char(64)
[ 本帖最后由 CoLoUrGhOsT 于 12-1-2009 11:01 AM 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 12-1-2009 12:19 PM
|
显示全部楼层
"L1" 和 "L2" 的位置固定吗?
如果是,试试
- select top 1 date, Desc from A
- where Date >= '2008-12-10 15:31:30.000'
- and Id = 5
- and (desc like '___L1%' or desc like '___L2%')
- order by date
复制代码
听说 like '%something' 会导致慢. |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 12-1-2009 03:48 PM
|
显示全部楼层
你的意思是我的L1 和L2的prefix是一样的,然后像这样?
desc like 'abcL1%' or desc like 'abcL2%'
我的prefix不一样的。。。
%something很慢。。因为不可以用index, 而something%可以用index |
|
|
|
|
|
|
|
|
|
|
发表于 14-1-2009 10:44 AM
|
显示全部楼层
MySQL 有 "_" (underscore) single wildcard character.
不晓得,其他的 RDMS 支持吗?
like '_L1%' 可以提取 'aL1b', '1L1de', 'zL1rst'
如果你的 "L1" 和 "L2" 都在第二位置,desc like '_L1%' or desc like '_L2%'
如果你的 "L1" 和 "L2" 都在第四位置,desc like '___L1%' or desc like '___L2%'
如果位置不固定,就不行了。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 14-1-2009 02:46 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 27-1-2009 10:12 AM
|
显示全部楼层
SELECT TOP 1 date, Desc FROM
(SELECT date, Desc FROM A
WHERE Date >= '2008-12-10 15:31:30.000'
AND Id = 5 ORDER BY date)
WHERE desc LIKE '%L1%' OR desc LIKE '%L2%'
如果还不行,
需要你多点资料来分析。。
Table..? |
|
|
|
|
|
|
|
|
|
|
发表于 28-1-2009 12:22 AM
|
显示全部楼层
select min(date), Desc from A
where Date >= '2008-12-10 15:31:30.000'
and Id = 5
and (desc like '%L1%' or desc like '%L2%')
GROUP BY Desc |
|
|
|
|
|
|
|
|
|
|
发表于 28-1-2009 12:27 AM
|
显示全部楼层
select min(date), Desc from A
where Date >= '2008-12-10 15:31:30.000'
and Id = 5
and (desc like '%L1%' or desc like '%L2%')
GROUP BY Desc |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|