{"id":1489,"date":"2022-03-10T14:09:48","date_gmt":"2022-03-10T14:09:48","guid":{"rendered":"https:\/\/datarebus.com\/?p=1489"},"modified":"2022-03-10T14:32:05","modified_gmt":"2022-03-10T14:32:05","slug":"daha-hizli-sorgular-icin-ufak-ipuclari","status":"publish","type":"post","link":"https:\/\/datarebus.com\/index.php\/2022\/03\/10\/daha-hizli-sorgular-icin-ufak-ipuclari\/","title":{"rendered":"Daha H\u0131zl\u0131 Sorgular i\u00e7in Ufak \u0130pu\u00e7lar\u0131"},"content":{"rendered":"\n<h1><\/h1>\n\n\n\n<p>\u0130li\u015fkisel veritabanlar\u0131 \u00f6zelinde ya\u015fanan performans sorunlar\u0131na kar\u015f\u0131 alman\u0131z gereken \u00f6nlemlerin neler oldu\u011funu \u00e7o\u011fumuz biliyoruz. INDEX\u2019ler bu konuda en ba\u015f\u0131 \u00e7eken yap\u0131lar. Bir index\u2019in sa\u011flayaca\u011f\u0131 fayday\u0131 ba\u015fka bir yol ile elde etmemizin imkan\u0131 yok. Ama \u015fu da unutulmamal\u0131d\u0131r ki tablo \u00fczerinde \u00e7ok fazla index olmas\u0131 da ba\u015fka performans sorunlar\u0131na neden olacakt\u0131r. Bu nedenle l\u00fctfen Veritaban\u0131 sunucunuzun \u00f6nerdi\u011fi ya da eksik g\u00f6rd\u00fc\u011f\u00fc indexleri g\u00f6z\u00fc kapal\u0131 olarak yaratmay\u0131n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" src=\"https:\/\/datarebus.com\/wp-content\/uploads\/2021\/04\/data-mining.png\" alt=\"\" class=\"wp-image-733\" width=\"838\" height=\"475\" srcset=\"https:\/\/datarebus.com\/wp-content\/uploads\/2021\/04\/data-mining.png 1015w, https:\/\/datarebus.com\/wp-content\/uploads\/2021\/04\/data-mining-300x170.png 300w, https:\/\/datarebus.com\/wp-content\/uploads\/2021\/04\/data-mining-768x436.png 768w\" sizes=\"(max-width: 838px) 100vw, 838px\" \/><\/figure>\n\n\n\n<p>Peki, index \u00f6nerimiz yok ve hala sorgular\u0131m\u0131z yava\u015f \u00e7al\u0131\u015f\u0131yor ise neler de\u011fi\u015ftirebiliriz:<\/p>\n\n\n\n<h2>1-&nbsp;&nbsp;&nbsp; Veri Tiplerinin Do\u011fru Se\u00e7ilmesi<\/h2>\n\n\n\n<p>VCHAR() veri tipi \u00e7o\u011fu yaz\u0131l\u0131mc\u0131n\u0131n sevdi\u011fi bir veri tipi. Detaylar\u0131 bildi\u011finizi kabul ederek s\u00f6yleyeyim, \u00f6rne\u011fin VARCHAR(20) olarak tan\u0131mlanan bir ISIM alan\u0131n\u0131 okumak i\u00e7in SQL sunucu \u00f6ncelikle Header k\u0131sm\u0131ndan i\u00e7erideki verinin tam boyutunu \u00f6\u011frenmek zorunda. Zira buradaki veri 0\u2019 da olabilir 20\u2019 de. Ama ayn\u0131 alan\u0131 CHAR(20) tan\u0131mlasa idik SQL sunucu kafadan 20bit\u2019lik bir okuma yapacakt\u0131.<\/p>\n\n\n\n<p>Peki bu durumda ne \u00f6neririm? Birincisi telefon numaras\u0131, vergino gibi a\u015fa\u011f\u0131 yukar\u0131 boyutu ayn\u0131 olan alanlar\u0131n kesinlikle CHAR() olarak tan\u0131mlanmas\u0131. \u0130kinci olarak ta e\u011fer alan(kolon) 5 karakterden k\u00fc\u00e7\u00fck ise hi\u00e7 VARCHAR olay\u0131na girmeyin.<\/p>\n\n\n\n<h2>2-&nbsp;&nbsp;&nbsp; Veri CONVERT \u0130\u015flemlerinden Uzak Durun<\/h2>\n\n\n\n<p>Bunu bilin\u00e7li olarak yapabilirsiniz. Bir say\u0131sal de\u011feri STRING\u2019e ya da bir STRING alan\u0131n\u0131 TAR\u0130H format\u0131na \u00e7evirerek kullanmak okunan t\u00fcm veri i\u00e7in (mesela 1 Milyon Kay\u0131t) bu i\u015flemin yap\u0131lmas\u0131na neden olur. Bunu bilmeden de yap\u0131yor olabilirsiniz. Kar\u015f\u0131la\u015ft\u0131rd\u0131\u011f\u0131n\u0131z iki alan\u0131n tan\u0131m\u0131 farkl\u0131 ise SQL bunu arka planda uyguluyor olabilir. Tabii bir de bu CONVERT i\u015flemi WHERE k\u0131sm\u0131nda ise yolunuz FULL TABLE SCAN\u2019e kadar gidebilir.<\/p>\n\n\n\n<h2>3-&nbsp;&nbsp;&nbsp; Sorgunuzun \u201cWHERE\u201d k\u0131sm\u0131nda FONKS\u0130YON kullanmay\u0131n<\/h2>\n\n\n\n<p>Where DATE(birth_date)&nbsp; ya da<\/p>\n\n\n\n<p>Where CONCAT(firstname, \u2018 \u2019, lastname) = \u2018\u00f6mer zeybek\u2019 &nbsp;gibi kullan\u0131mlar indexlerinizi de kullan\u0131m d\u0131\u015f\u0131nda b\u0131rakabilir. T\u00fcm Index ya da daha k\u00f6t\u00fcs\u00fc data page\u2019lerinde okuma yapmak&nbsp; ve fonksiyonu uygulamak zorunda kalabilirsiniz.<\/p>\n\n\n\n<h2>4-&nbsp;&nbsp;&nbsp; \u201cSelect * from\u201d kullanmamaya \u00e7al\u0131\u015f\u0131n<\/h2>\n\n\n\n<p>Bu kullan\u0131m zaten yaz\u0131l\u0131m standartlar\u0131 a\u00e7\u0131s\u0131ndan da sorun yarat\u0131r. Tabloya eklenecek bir alan bir anda uygulamada umulmayan yerlerin hata almas\u0131na neden olur. Bizim a\u00e7\u0131m\u0131zdan bak\u0131l\u0131r ise b\u00fcy\u00fck ihtimal ile kullan\u0131lmayacak baz\u0131 alanlar\u0131n okunmas\u0131na delalettir.<\/p>\n\n\n\n<h2>5-&nbsp;&nbsp;&nbsp; Baz\u0131 Ufak k\u0131s\u0131tlamalar<\/h2>\n\n\n\n<ul><li>Group BY alanlar\u0131nda DOUBLE ya da FLOAT veri tiplerinin kullan\u0131lmas\u0131 sorun yaratabilir.<\/li><li>Distinct ile Group by gibi asl\u0131nda ayn\u0131 sonucu \u00e7\u0131karan komutlar\u0131n birlikte kullan\u0131lmas\u0131ndan ka\u00e7\u0131n\u0131lmal\u0131d\u0131r.<\/li><li>\u00c7ok fazla SUB_QUERY g\u00f6r\u00fcn\u00fc\u015f olarak g\u00fczel olsa da fazla TEMPDB ve RAM t\u00fcketece\u011fi i\u00e7in ka\u00e7\u0131n\u0131lmal\u0131d\u0131r. Tabii m\u00fcmk\u00fcn oldu\u011fu s\u00fcrece.<\/li><li>OR kullanarak JOIN yap\u0131lmas\u0131ndan da ka\u00e7\u0131nmak gerek<\/li><\/ul>\n\n\n\n<h2>\u00a06-\u00a0\u00a0\u00a0 Text Search<\/h2>\n\n\n\n<p>\u00d6zellikle LIKE ile yap\u0131lan aramalar do\u011fal olarak t\u00fcm tablonun okunmas\u0131 (index tan\u0131ml\u0131 ise t\u00fcm index page\u2019lerinin okunmas\u0131) ile ger\u00e7ekle\u015fir.<\/p>\n\n\n\n<h2>7-&nbsp;&nbsp;&nbsp; Ufak bir Ek<\/h2>\n\n\n\n<p>Yukar\u0131daki anlat\u0131lanlara paralel olarak TAR\u0130H alan\u0131nda bir sorgu \u00e7al\u0131\u015ft\u0131r\u0131yorsunuz diyelim. E\u011fer tablo \u00e7ok b\u00fcy\u00fck ise ya da \u00e7ok h\u0131z isteniyor ise burada tarih alan\u0131n\u0131 3 ek kolon daha yaratabilirsiniz. \u00d6rne\u011fin <\/p>\n\n\n\n<p>YIL smallint,    GUN smallint ve    AY smallint \u015feklinde. <\/p>\n\n\n\n<p>Bu 3 alan tarih alan\u0131nda INSERT an\u0131nda \u00fcretilir. 2022 y\u0131l\u0131 Ocak ay\u0131 raporu i\u00e7in sadece Y\u0131l=2022 and ay=1 \u015fekl\u00eende \u00e7al\u0131\u015fabiliriz.<\/p>\n\n\n\n<h2>8-&nbsp;&nbsp;&nbsp; Kodlama<\/h2>\n\n\n\n<p>Buradaki kodlalama yaz\u0131l\u0131m manas\u0131nda de\u011fil. Diyelim ki firma ismi, belirli a\u00e7\u0131klamalar, departman isimleri gibi kendini tekrar eden alanlar\u0131n\u0131z mevcut.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Id<\/td><td>Firma<\/td><td>Departman<\/td><td>Title<\/td><\/tr><tr><td>02<\/td><td>Datarebus Bili\u015fim Ltd.<\/td><td>Bilgi \u0130\u015flem departman\u0131<\/td><td>Uzman<\/td><\/tr><tr><td>03<\/td><td>Datarebus Bili\u015fim Ltd.<\/td><td>Bilgi \u0130\u015flem departman\u0131<\/td><td>Uzman<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>yerine<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Id<\/td><td>Firma<\/td><td>Departman<\/td><td>Title<\/td><\/tr><tr><td>02<\/td><td>01<\/td><td>01<\/td><td>03<\/td><\/tr><tr><td>03<\/td><td>01<\/td><td>01<\/td><td>03<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u015eeklinde olmad\u0131 gerekir. Firma isminin ya da departman isminin ne oldu\u011funu ayr\u0131 bir tabloda tutabilirsiniz.  Bu \u015fekilde hem yerden(disk) b\u00fcy\u00fck kazan\u00e7 sa\u011flayacaks\u0131n\u0131z hem de performans\u0131n\u0131z artacak. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>\u00d6mer ZEYBEK <\/p><p>Datarebus<\/p><\/blockquote>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0130li\u015fkisel veritabanlar\u0131 \u00f6zelinde ya\u015fanan performans sorunlar\u0131na kar\u015f\u0131 alman\u0131z gereken \u00f6nlemlerin neler oldu\u011funu \u00e7o\u011fumuz biliyoruz. INDEX\u2019ler bu konuda en ba\u015f\u0131 \u00e7eken yap\u0131lar. Bir index\u2019in sa\u011flayaca\u011f\u0131 fayday\u0131 ba\u015fka bir yol ile elde etmemizin imkan\u0131 yok. Ama \u015fu da unutulmamal\u0131d\u0131r ki tablo \u00fczerinde \u00e7ok fazla index olmas\u0131 da ba\u015fka performans sorunlar\u0131na neden olacakt\u0131r. Bu nedenle l\u00fctfen Veritaban\u0131 sunucunuzun [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":733,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[38,39,22],"_links":{"self":[{"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/posts\/1489"}],"collection":[{"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/comments?post=1489"}],"version-history":[{"count":6,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/posts\/1489\/revisions"}],"predecessor-version":[{"id":1495,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/posts\/1489\/revisions\/1495"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/media\/733"}],"wp:attachment":[{"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/media?parent=1489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/categories?post=1489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/tags?post=1489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}