Group: http://groups.google.com/group/altdotnetrturkiye/topics
- search performans! bir soru [12 Updates]
- Veri Şifrelemesi [7 Updates]
Eralp Erat <eralp...@gmail.com> May 23 04:25PM +0300
Selamlar ;
aşağıda gorduğunuz üzere bir tablo var ve tabloda 2.3 milyon kayıt var.
bu tabloada yer alan content alanını kullanarak bir sorgu oluşturdum.
sorgunun amacı su , girilen keyword e bağlı olarak (bundan sonra keyword
olarak anılacak) content alanında arama yapıyor ve girilen keyword+...
şeklinde bütün kelimeleri (ve grupları) dökmesi.Ek olarak gelen sonucların
% N 'lik bir kısmına dail olması ( örneğin %90 a giriyorsa sonuclarda
görünsün.) durumuda var.
yani SABANCI diye birşey girdiğimde bana gelen şekil 2 deki gibi çıktı.
Sorgu çok yavaş çalışıyor..Derdim bunu hızlandırmak!..SP'nin çıktısını
aşağıda verdim.
Fikirlerinizi alabilir miyim ?
Tşk.
şekil -1
[image: Inline image 1]
Şekil 2
[image: Inline image 3]
Sp içerik .
USE [ARSIVMPDB]
-- =============================================
-- Author: Eralp Erat
-- =============================================
ALTER PROCEDURE [dbo].[GetMostUsedKeywordsWithSuffixWithRatio]
@key as nvarchar(100),
@ratio as decimal(18,2)= 0.80
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SearchWord varchar(100)
SET @SearchWord = @key
DECLARE @SearchWord2 varchar(100)
SET @SearchWord2 = '"'+@key+'"';
CREATE TABLE [dbo].[#tbl_News_q](
[KELIME] nvarchar(60),
[DEGER] [decimal](18, 2) NULL
)
DECLARE @DEGER decimal(18,2)
DECLARE @DEGERLIMIT decimal(18,2)
DECLARE @TOPLAM decimal(18,2)
DECLARE @KELIME nvarchar(60)
SET @TOPLAM = 0;
SET @DEGERLIMIT = 0;
SET @DEGER = 0;
select @DEGERLIMIT = (
select sum(y.adet)
from (Select sep.Col as A,COUNT(*) as adet FROM (
Select * FROM (
Select value =
Upper(RTrim(LTrim(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
CAST(content as nvarchar(MAX)),
',', ' '), '.', ' '),
'!', ' '), '+', ' '),
':', ' '), '-', ' '),
';', ' '), '(', ' '),
')', ' '), '/', ' '),
'&', ''), '?', ' '),
' ', ' '), ' ', ' '))))
FROM tbl_News as t where CONTAINS(t.Content,@SearchWord2)
) easyValues
Where value <> ''
) actualValues
Cross Apply dbo.SeparateValues(value, ' ') sep
Group By sep.Col
) as y
where y.A like ''+@SearchWord+'%'
--Order By y.adet Desc
) * @ratio
SET @TOPLAM = 0;
SET @DEGER = 0;
DECLARE Toplam_Cursor CURSOR FOR
select y.A as KELIME,y.adet as DEGER
from (Select sep.Col as A,COUNT(*) as adet FROM (
Select * FROM (
Select value =
Upper(RTrim(LTrim(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
CAST(content as nvarchar(MAX)),
',', ' '), '.', ' '),
'!', ' '), '+', ' '),
':', ' '), '-', ' '),
';', ' '), '(', ' '),
')', ' '), '/', ' '),
'&', ''), '?', ' '),
' ', ' '), ' ', ' '))))
FROM tbl_News as t where CONTAINS(t.Content,@SearchWord2)
) easyValues
Where value <> ''
) actualValues
Cross Apply dbo.SeparateValues(value, ' ') sep
Group By sep.Col
) as y
where y.A like ''+@SearchWord+'%'
Order By y.adet Desc
OPEN Toplam_Cursor
FETCH NEXT FROM Toplam_Cursor INTO @KELIME,@DEGER
WHILE @@FETCH_STATUS =0
BEGIN
SET @TOPLAM = @TOPLAM + @DEGER
if (@TOPLAM < @DEGERLIMIT)
begin
insert into #tbl_News_q(KELIME,DEGER) values (@KELIME,@DEGER)
FETCH NEXT FROM Toplam_Cursor INTO @KELIME,@DEGER
end else
break;
END
CLOSE Toplam_Cursor
DEALLOCATE Toplam_Cursor
select * from #tbl_News_q
END
"Hakan Taşpınar" <hknt...@gmail.com> May 23 04:27PM +0300
Execution planı gösterebilirmisin
Eralp Erat <eralp...@gmail.com> May 23 04:44PM +0300
Execution Plan'i eke koydum.
Tşk.
2012/5/23 Hakan Taşpınar <hknt...@gmail.com>
Murat Haksal <murat....@gmail.com> May 23 04:59PM +0300
Eralp slm
indb olması constraint ise fulltext,App da çözme durumu varsa lucene bakmanı onerebilirim
"Uğur Tılıkoğlu" <tili...@gmail.com> May 23 04:59PM +0300
eray hocam affınıza sığınarak, sp biraz karışık geldi. tam olarak ne yapmak
istediğini bir örnekle anlatabilir misin? belki farklı bir yoldan daha kısa
çözümü vardır. bir de yavaş çalışıyor derken, kaç sn sürüyor bu?
Eralp Erat <eralp...@gmail.com> May 23 05:09PM +0300
@Uğur : sanırım image 'ları göremedin doğru mudur ?
2012/5/23 Uğur Tılıkoğlu <tili...@gmail.com>
"Hakan Taşpınar" <hknt...@gmail.com> May 23 05:10PM +0300
@Murat lucene kullanırken çokça OutOfMemoryExecption sorunu yaşadım. sp
iyileştirilebilir gibi görünüyor üzerinde daha bakıyorum
Eralp Erat <eralp...@gmail.com> May 23 05:11PM +0300
acikcasi dynamics CRM içerisinden call ediyoruz hardcode elimizde değil
sadece JS inject edebildiğimiz için cok daha iyi bir opsiyon olan lucene 'i
kullanırdık dediğin gibi.
o yüzden olayı sql tarafında çözmek istiyorum.Minimum eforla.
2012/5/23 Murat Haksal <murat....@gmail.com>
Eralp Erat <eralp...@gmail.com> May 23 05:13PM +0300
Sp de kesinlikle optimizasyon yapılabilir cok salla pati oldu zaten
orneğin.Total sum i almak için aynı query'i calistirmayip cursor i break
etmeyerek totale ulaşırsam t yi t/2 ye dusurebiliriz.
bunu goruyorum.
lakin bu da kesmiyor beni bazı kelimeler için ( örneğin : test) 6 dk+
oluyor dönüş zamanı..
cıldırınnnn cıldırıınnnnn
2012/5/23 Hakan Taşpınar <hknt...@gmail.com>
Eralp Erat <eralp...@gmail.com> May 23 05:19PM +0300
ilk optimizasyon :
DECLARE @total as int;
select @total = 0;
DECLARE @ratio as decimal (18,2);
set @ratio = 0.90;
DECLARE @SearchWord varchar(100)
SET @SearchWord = 'SABANCI'
DECLARE @SearchWord2 varchar(100)
SET @SearchWord2 = '"'+@SearchWord+'"';
--drop table [#tbl_News_q]
CREATE TABLE [dbo].[#tbl_News_q](
[KELIME] nvarchar(60),
[DEGER] [decimal](18, 2) NULL
)
DECLARE @DEGER decimal(18,2)
DECLARE @DEGERLIMIT decimal(18,2)
DECLARE @TOPLAM decimal(18,2)
DECLARE @KELIME nvarchar(60)
SET @TOPLAM = 0;
SET @DEGERLIMIT = 0;
SET @DEGER = 0;
--select @DEGERLIMIT = (
-- select sum(y.adet)
-- from (Select sep.Col as A,COUNT(*) as adet FROM (
-- Select * FROM (
-- Select value =
-- Upper(RTrim(LTrim(
-- Replace(Replace(
-- Replace(Replace(
-- Replace(Replace(
-- Replace(Replace(
-- Replace(Replace(
-- Replace(Replace(
-- Replace(Replace(
-- CAST(content as nvarchar(MAX)),
-- ',', ' '), '.', ' '),
-- '!', ' '), '+', ' '),
-- ':', ' '), '-', ' '),
-- ';', ' '), '(', ' '),
-- ')', ' '), '/', ' '),
-- '&', ''), '?', ' '),
-- ' ', ' '), ' ', ' '))))
-- FROM tbl_News as t where CONTAINS(t.Content,@SearchWord2)
-- ) easyValues
-- Where value <> ''
-- ) actualValues
-- Cross Apply dbo.SeparateValues(value, ' ') sep
-- Group By sep.Col
-- ) as y
-- where y.A like ''+@SearchWord+'%'
-- --Order By y.adet Desc
--) * @ratio
SET @TOPLAM = 0;
SET @DEGER = 0;
DECLARE Toplam_Cursor CURSOR FOR
select y.A as KELIME,y.adet as DEGER
from (Select sep.Col as A,COUNT(*) as adet FROM (
Select * FROM (
Select value =
Upper(RTrim(LTrim(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
Replace(Replace(
CAST(content as nvarchar(MAX)),
',', ' '), '.', ' '),
'!', ' '), '+', ' '),
':', ' '), '-', ' '),
';', ' '), '(', ' '),
')', ' '), '/', ' '),
'&', ''), '?', ' '),
' ', ' '), ' ', ' '))))
FROM tbl_News as t where CONTAINS(t.Content,@SearchWord2)
) easyValues
Where value <> ''
) actualValues
Cross Apply dbo.SeparateValues(value, ' ') sep
Group By sep.Col
) as y
where y.A like ''+@SearchWord+'%'
Order By y.adet Desc
OPEN Toplam_Cursor
FETCH NEXT FROM Toplam_Cursor INTO @KELIME,@DEGER
WHILE @@FETCH_STATUS =0
BEGIN
SET @TOPLAM = @TOPLAM + @DEGER
FETCH NEXT FROM Toplam_Cursor INTO @KELIME,@DEGER
END
CLOSE Toplam_Cursor
SET @KELIME = null;
SET @DEGER = 0;
SET @DEGERLIMIT = @TOPLAM * @ratio;
SET @TOPLAM = 0;
OPEN Toplam_Cursor
FETCH NEXT FROM Toplam_Cursor INTO @KELIME,@DEGER
WHILE @@FETCH_STATUS =0
BEGIN
SET @TOPLAM = @TOPLAM + @DEGER
if (@TOPLAM < @DEGERLIMIT)
begin
insert into #tbl_News_q(KELIME,DEGER) values (@KELIME,@DEGER)
FETCH NEXT FROM Toplam_Cursor INTO @KELIME,@DEGER
end else
break;
END
CLOSE Toplam_Cursor
DEALLOCATE Toplam_Cursor
select * from #tbl_News_q
2012/5/23 Eralp Erat <eralp...@gmail.com>
"Uğur Tılıkoğlu" <tili...@gmail.com> May 23 05:28PM +0300
dıııt yanlış cevap, resimleri görüyorum ama, saat 17:00'yi geçtiği için
anlamakta zorluk çekiyorum belki de :) "grupları" ve "%N'lik kısmına
giriyorsa" kısmını anlamadım. zaten anlasam da yazabilir miyim, orası ayrı
konu :)
2012/5/23 Eralp Erat <eralp...@gmail.com>
Eralp Erat <eralp...@gmail.com> May 23 05:40PM +0300
bende de bir sorun var sanırım ( cok tane var itiraf ediyorum burdan
dünyaya kayda geçsin :) )
şimdi söyle dusun ;
her bir satırda bir kolonda 100 lerce kelimenin olduğu 2milyon kayıt var
elimizde..FullText search için ayarlı.
aradığım veri su ben SABANCI dediğimde bu kolondaki tüm kelimeleri tarayip
içinde SABANCI prefix'ine sahip olan bütün kelimeleri group by
yap ve en cok tekrar edene gore sort et diyorum.
Bu sorgunun cevabını sosyal medya aramalarında kullanıyorum öyle
diyeyim.Tekrar edilme sıklığı yüksek olan kelime ile daha cok ve daha
doğruya yakın sonucu yakalayabilirim mantığı var.
%N e girm olayıda su. eskiden top 10 diyordum sonuc içerisinden ama dediler
ki dur o oyle olmaz. kullanıcının karar vermesi lazim..ee dedim ama sonucu
1 olan bir suru kayıt olacak manasız olur.O zaman da dedim soyle yapalım
bir ratio verin örneğin toplamda 100 kelime cıktı diye lim bunların toplam
cikma adedi ise 750 olsun..
1.SABANCI'nın 550
2.SABANCI'dan 49
3.SABANCI'ya 50
4.SABANCIA 41
5.SABANCIK 30
6.SABANCIN 30
...
....
gibi yani..toplam 750 bunun ratio değeri ile çarpında örneğin 0.8 olursa bu
değer 600 gibi bir değer yapıyor.. yani arama sonucuna sadece 1 ve 2.
satırlar yansıyor.Geri kalanını umursamıyor.
anlatabildim mi ?
2012/5/23 Uğur Tılıkoğlu <tili...@gmail.com>
Eralp Erat <eralp...@gmail.com> May 23 03:44PM +0300
Geyik işte.
Kusura bakma ama bence iyi bir ders olsun arkadaşının firmasına bu konu.
Keşke manşetlere düşse.Herkes bilsin konuyu.
Adam gibi değer verilmeyen bir departmanın dertleri , asıl fonksiyonları
(varlık sebebi), kalifiye eleman çalıştırmanın, güvenliğin vb. bir takım
kriterler yönetimde tekrar gündeme gelir belki..
zihniyeti backuplasınlar ancak..
2012/5/22 Muzaffer Anıl KABAN <muzaff...@gmail.com>
"Hakan Taşpınar" <hknt...@gmail.com> May 23 03:52PM +0300
Genel de kurumsal firmalarda olan bu soruna yorumunu like lıyorum (=
"Mehmet Erdanışman" <mehmeter...@gmail.com> May 23 03:55PM +0300
@serdar son durum nedir ? datalari paylastilar mi ?
Eralp Erat <eralp...@gmail.com> May 23 04:10PM +0300
hiç sanmam..
direkt 20.000 $ isterim.
bir de tehdit ederim 3 saatte yatırdın yatırdın yoksa sildiğime dair video
cekip youtube a koyarım.Yani silme anını temsili tarihe kaydederim..Acisida
tarihe geçmiş olur.
2012/5/23 Mehmet Erdanışman <mehmeter...@gmail.com>
"Serdar KARAÇAY" <csha...@gmail.com> May 23 04:21PM +0300
Arkadaşlar,
P.tesi saat 10 hesaba parayı yatırmışlar.
Ama hala yedeklerini almamış.Şerefsizler.
Çok kötü bir durum oldu arkadaş için.
www.serdarkaracay.com | 0531 775 1659 | msn csha...@yahoo.com
"Mehmet Erdanışman" <mehmeter...@gmail.com> May 23 04:38PM +0300
Dusundugum gibi oldu uzuldum acikcasi.İns. datalari verirler az para degil.
Bundan sonra daha dikkatli olsunlar. Yarin baska birileri gelip ," yedekler
bende 4000 $ verin gonderiyim " diyenler cikabilir.
Eralp Erat <eralp...@gmail.com> May 23 04:43PM +0300
gitti o para.
2012/5/23 Mehmet Erdanışman <mehmeter...@gmail.com>
You received this message because you are subscribed to the Google Group altdotnetturkiye.
--
You can post via email.
To unsubscribe from this group, send an empty message.
For more options, visit this group.
You received this message because you are subscribed to the Google Groups "altdotnetturkiye" group.
To post to this group, send email to altdotne...@googlegroups.com.
To unsubscribe from this group, send email to altdotnetturki...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/altdotnetturkiye?hl=en.