佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1150|回复: 22

optimize query

[复制链接]
发表于 7-1-2009 10:47 AM | 显示全部楼层
试试 create index for Date and Desc column...
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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,以上的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 | 显示全部楼层
我试了。。。两个query都一样哦。。。
回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 5-1-2009 04:48 PM | 显示全部楼层
不是。。。。。。。: (
回复

使用道具 举报


ADVERTISEMENT

发表于 6-1-2009 10:18 PM | 显示全部楼层
试试看用Full Text Search.
回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 7-1-2009 02:56 PM | 显示全部楼层
date已经有index了。。。在desc 加index不是很适合。。。所以我的经理不给。。。而且我试了加了。。。还是达不到我要求的速度。。。
看来我必须想其他的query或方法。。。
回复

使用道具 举报

发表于 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" 的位置固定吗?
如果是,试试


  1. select top 1 date, Desc from A
  2. where Date >= '2008-12-10 15:31:30.000'
  3. and Id = 5
  4. and (desc like '___L1%' or desc like '___L2%')
  5. 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%'
如果位置不固定,就不行了。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 15-12-2025 07:49 AM , Processed in 0.137772 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表