星期五, 4月 17, 2020

GodexEZ 1300 Plus 異常排除

老大告知說 GodexEZ1300Plus 標籤機出紙位置不適當要修正,使用者撕紙不方便,找到 GodexRT730X - 撕紙位置 筆記,想說這只是一塊蛋糕而已,結果就踢到鐵板了,>.<

狀況一:GoLabel 軟體抓不到標籤機

一查才發現,這台標籤機竟然是透過 LPT Port 來進行列印,當下有點傻眼,當然緣由也沒人知道了,改成 USB 就是
狀況二:停歇點位置無法儲存

久久操作一次 GoLabel,每次接觸都是新的開始,設定停歇點一直覺得很沒有作用,後來才發現到,原來設定完,不能只按 [確定] 還要按 [列印],讓標籤機出紙,[列印] 含有 [套用] 功能的感覺,Orz

把 GodexEX1300Plus 停歇點設為 12 就可以正常撕紙

狀況三:紙張版面跑版

檢查過程式、列印到其他標籤機確認是沒有異常,也更換最新 Driver,無解。後來是透過 GoLabel 軟體,重新設定 8x5 紙張大小,才順利解決

原本是很正常列印在單張 8x5 標籤紙上,現在跑版列印出兩張來
透過 GoLebel 重新設定紙張大小
其他發現:GoLabel 有網路功能搜尋功能

星期三, 4月 15, 2020

[SSMS] 在其他索引標籤中顯示結果

看這堂課 - Analyzing SQL Server Query Plans 時老師介紹的 SSMS 設定,改善每次執行 TSQL 後,要看 [結果]、[訊息]、[執行計畫] 時,必須拉視窗來增加閱讀範圍

預設情況,執行 TSQL 後會變成分割為上下兩個視窗,上方為 TSQL 語法、下方為 [結果]、[訊息]、[執行計畫],使用全螢幕功能,也是上下兩個視窗一起全螢幕,沒有辦法針對 [結果]、[訊息]、[執行計畫] 單一來全螢幕

[SSMS] 在其他索引標籤中顯示結果-1

SSMS 內進行 [在其他索引標籤中顯示結果] 設定

[SSMS] 在其他索引標籤中顯示結果-2

修改完成後,不會再分割為上下視窗,而是把 [結果]、[訊息]、[執行計畫] 變成標籤,基本上版面較大,也能針對 [結果]、[訊息]、[執行計畫] 單一來全螢幕

[SSMS] 在其他索引標籤中顯示結果-3

星期三, 4月 08, 2020

[SQL] 複合索引 - 欄位順序影響

在改寫一個查詢時跳出 missing index 建議,發現該建議影響重點在於更換複合索引順序,剛好最近有看過國外大神介紹複合索引,很快就抓到這個點。

以往複合索引都只把重心放在第一個欄位的選擇,畢竟第一個欄位會影響到 index seek 是否會被使用,就沒有注意到剩下欄位順序,該情況是複合索引順序為 ADCB,TSQL 語法大略為
SELECT
    ...........
FROM TableName
WHERE 欄位A = 條件A
    AND 欄位B = 條件B
    AND 非Index欄位1 > 條件
WHERE 條件,用到複合索引的第一個和第四個欄位,missing index 建議複合索引順序以 AB 為首,簡單說就是把複合索引的前兩個欄位順序符合 WHERE 條件,修正複合索引順序後,statistics 因為都是跑 index seek 所以差異不大,但執行計畫從 0.74559 變成 0.33610,大概改善 45% 左右,該查詢剛好是該 Table 的主查詢語法,就直接把複合索引順序修正

以 AdventureWorks2017 來模擬的話,情況大概如下語法
USE AdventureWorks2017
GO

DROP INDEX IF EXISTS [IX_LastName_FirstName_MiddleName] ON Person.Person
DROP INDEX IF EXISTS [IX_LastName_MiddleName_FirstName] ON Person.Person
GO 

CREATE INDEX [IX_LastName_FirstName_MiddleName] ON Person.Person (LastName,FirstName,MiddleName);  
CREATE INDEX [IX_LastName_MiddleName_FirstName] ON Person.Person (LastName,MiddleName,FirstName);  
GO

-- WHERE 條件為複合索引的第一、二欄位
SELECT *
FROM Person.Person WITH (INDEX(IX_LastName_FirstName_MiddleName))
WHERE LastName = 'Reed'
  AND FirstName = 'Gabriella'

-- WHERE 條件為複合索引的第一、三欄位
SELECT *
FROM Person.Person WITH (INDEX(IX_LastName_MiddleName_FirstName))
WHERE LastName = 'Reed'
  AND FirstName = 'Gabriella'
[SQL] 複合索引欄位順序影響 - 2